【Java】JSPでタグライブラリを使う(JSTL)
こんにちは。エンジニアの新田です!ここでは、システムエンジニアとして働いている私が、システム開発手法や開発言語について紹介していこうと思います。今回は、JSPの標準タグライブラリ「JSTL」について紹介します。Javaについて勉強している方、Webアプリケーションを構築したいと思っている方の参考になれば幸いです!関連記事リンク: 【Java】JSPの基本的な構文/【Java】JSPのアクションタグ
Workteria(ワークテリア)では難易度の高いものから低いものまで、スキルや経験に合わせた案件を多数揃えています。会員登録は無料ですので、ぜひ会員登録してご希望の案件を探してみてください!
フリーランス/正社員のエンジニアとして活躍するには、ご自身のスキルや経験に合わせた仕事を選ぶことが大切です。ご希望の案件がみつからない場合はお気軽にお問い合わせください!ユーザ満足度の高いキャリアコンサルタントが在籍していますので、希望条件や悩み事などなんでもご相談ください。ご希望にピッタリの案件をご紹介させていただきます。
当記事では、java.nio.fileパッケージを用いてファイル属性を取得・変更する方法について、Java SE 11 Goldを取得している著者が解説します。
ファイル属性とは、ファイルの種類、サイズ、作成日時、更新日時などの情報(これらの情報は、よくメタデータと呼ばれます)のことです。java.nio.fileパッケージではこれらの情報を取得・変更を行うためのクラスとメソッドが用意されています。
当記事でのサンプルコードは、前記事で作成したファイル名を元に記述していますが、適当なファイルを用意しても構いません。
java.nio.fileパッケージの概要について知りたい方は、以下の記事を参照して下さい。
【Java】Pathオブジェクトを生成する方法(java.nio.fileパッケージ)
また、基本的なファイル操作は以下の記事で解説します。
【Java】java.nio.fileパッケージの使用例①(ファイルの作成、存在チェック)
【Java】java.nio.fileパッケージの使用例②(移動・コピー、削除)
FileChannelを使ったファイルのコピーは、以下の記事で解説します。
【Java】FileChannelを使って高速にファイル入出力を行ってみた
ファイル属性の取得には、FileStoreクラス、Filesクラスのメソッドを使います。
ファイル名や書き込み権限などのファイル属性を取得するには、FileStoreクラスを使います。ファイルストアとは、ファイルシステムやメタデータを含むファイルの実データを配置してある場所という意味です。
FileStoreクラスを呼び出すには、FilesクラスのgetFileStoreメソッドを使います。記述例は以下の通りです。
//FileSystemオブジェクトを取得
FileSystem fileSystem = FileSystems.getDefault();
//ファイルストアを取得したい対象であるファイルのPathオブジェクトを取得する
Path path = fileSystem.getPath("ファイルのパス名");
//Files.getFileStoreメソッドで対象ファイルのFileStoreオブジェクトを取得
FileStore fileStore = Files.getFileStore(path);
FileStoreクラスは、以下のようなメソッドを持ちます。
メソッド名 | 返り値の型 | 説明 |
---|---|---|
name() | String | ファイルシステムの名前を返します。 |
type() | String | FAT32、FAT16、NTFSなど、ファイルシステムの種類を返します。 |
toString() | String | ドライブの名前を返します。 |
isReadOnly() | boolean | このファイルが読み取り専用であるかどうかを判定します。 |
supportsFileAttributeView(Class<? extends FileAttributeView> type) | boolean | 引数に「DosFileAttributeView.class」を指定するとDos系のファイルシステム(主にWindows)をサポートするかどうか、「PosixFileAttributeView.class」を指定するとposix系のファイルシステム(主にMacOS)をサポートするかどうか判定します。 |
以下のサンプルコードは、カレントディレクトリに「sample.txt」という名前のファイルがあることを前提に記述しています。
public class getAttribute {
public static void main(String[] args) {
//FileSystemオブジェクトを取得
FileSystem fileSystem = FileSystems.getDefault();
//FileStoreオブジェクトを取得するファイルのPathオブジェクトを取得する
Path path = fileSystem.getPath("./sample.txt");
try {
//対象ファイルのFileStoreオブジェクトを取得
FileStore fileStore = Files.getFileStore(path);
//FileStoreクラスが持つメソッドを実行
System.out.println("ファイル名: " + fileStore.name());
System.out.println("ファイルシステムの種類 " + fileStore.type());
System.out.println("ドライブ名: " + fileStore.toString());
System.out.println("読み取り専用かどうか: " + fileStore.isReadOnly());
System.out.println("Dos系のファイルシステムかどうか: " + fileStore.supportsFileAttributeView(DosFileAttributeView.class));
System.out.println("Posix系のファイルシステムかどうか: " + fileStore.supportsFileAttributeView(PosixFileAttributeView.class));
} catch (IOException e) {
e.printStackTrace();
}
}
}
実行環境によって結果は異なりますが、上記のサンプルコードを実行すると著者の環境では以下のように出力されます。
ファイル名: Windows
ファイルシステムの種類 NTFS
ドライブ名: Windows (C:)
読み取り専用かどうか: false
Dos系のファイルシステムかどうか: true
Posix系のファイルシステムかどうか: false
ファイルの所有者や大きさ、最終更新日時などを知りたい場合は、Filesクラスのメソッドを使用します。
Filesクラスのメソッドのうち、属性を取得するものには主に以下のようなものがあります。
メソッド名 | 返り値の型 | 説明 |
---|---|---|
getOwner(Path path, LinkOption... options) | UserPrincipal | ファイルの所有者を返します。UserPrincipalはユーザー識別情報を表す型で、ユーザー名を返すtoString()メソッドを持ちます。 LinkOptionでは、シンボリックリンクをたどるかどうかを指定します。 |
getLastModifiedTime( Path path, LinkOption... options) | FileTime | ファイルの最終変更時刻を返します。 FileTimeはファイルのタイムスタンプの値を表す型です。 |
size(Path path) | long | ファイルのサイズをバイト単位で返します。 |
isRegularFile( Path path, LinkOption... options) | boolean | ファイルが通常のファイルであるかどうかを判定します。 ディレクトリファイルやデバイスファイルであった場合はfalseを返します。 |
isDirectory( Path path, LinkOption... options) | boolean | ファイルがディレクトリファイルであるかどうかを判定します。 |
readAttributes( Path path, String attributes, LinkOption... options) | Map<String,Object> | ファイルの属性のうち、attributesで指定した属性を一括で返します。 attributesに「"*"」を指定することですべての基本ファイル属性を返します。 |
以下のサンプルコードは、カレントディレクトリに「sample.txt」という名前のファイルがあることを前提に記述しています。
public class getAttribute {
public static void main(String[] args) {
//FileSystemオブジェクトを取得
FileSystem fileSystem = FileSystems.getDefault();
//Pathオブジェクトを取得する
Path path = fileSystem.getPath("./sample.txt");
try {
//Filesクラスが持つメソッドを実行
System.out.println("ファイルの所有者: " + Files.getOwner(path));
System.out.println("ファイルの最終更新時刻: " + Files.getLastModifiedTime(path));
System.out.println("ファイルのサイズ: " + Files.size(path));
System.out.println("通常ファイルかどうか: " + Files.isRegularFile(path));
System.out.println("ディレクトリファイルかどうか: " + Files.isDirectory(path));
System.out.println("基本ファイル属性: " + Files.readAttributes(path, "*"));
System.out.println("サイズ・最終更新時刻・最終アクセス時刻: " + Files.readAttributes(path, "size,lastModifiedTime,lastAccessTime"));
} catch (IOException e) {
e.printStackTrace();
}
}
}
実行環境によって結果は異なりますが、上記のサンプルコードを実行すると著者の環境では以下のように出力されます。
ファイルの所有者: [PC名]\[ユーザー名]
ファイルの最終更新時刻: 2021-03-15T14:12:36.854Z
ファイルのサイズ: 13
通常ファイルかどうか: true
ディレクトリファイルかどうか: false
基本ファイル属性: {lastAccessTime=2021-04-25T16:18:15.06687Z, lastModifiedTime=2021-03-15T14:12:36.854Z, size=13, creationTime=2020-11-25T06:49:22.684401Z, isSymbolicLink=false, isRegularFile=true, fileKey=null, isOther=false, isDirectory=false}
サイズ・最終更新時刻・最終アクセス時刻: {lastAccessTime=2021-04-25T16:18:15.06687Z, lastModifiedTime=2021-03-15T14:12:36.854Z, size=13}
ファイル属性を変更するには、Filesクラスのメソッドを使用します。
ファイルの属性を変更するFilesクラスのメソッドには、以下のようなものがあります。
メソッド名 | 返り値の型 | 説明 |
---|---|---|
setLastModifiedTime(Path path, FileTime time) | Path | ファイルの最終更新時刻を変更します。 |
setAttribute(Path,Path, String attribute, Object value, LinkOption... options) | Path | ファイル属性の値を設定します。 attributeには、「[ファイルシステム名(basic、dos、posixなど)]:[属性名]」という形式で属性を指定し、valueには属性の値を指定します。 |
以下のサンプルコードは、カレントディレクトリに「sample.txt」という名前のファイルがあることを前提に記述しています。
public class setAttribute {
public static void main(String[] args) {
//FileSystemオブジェクトを取得
FileSystem fileSystem = FileSystems.getDefault();
//Pathオブジェクトを取得する
Path path = fileSystem.getPath("./sample.txt");
try {
System.out.println("最終更新時刻: " + Files.getLastModifiedTime(path));
System.out.println("書き込み可能かどうか: " + Files.isWritable(path));
//ファイルの最終更新時刻を現在時刻に変更
//FileTime.fromMillis(System.currentTimeMillis())で現在時刻をミリ秒単位で取得する
Files.setLastModifiedTime(path, FileTime.fromMillis(System.currentTimeMillis()));
//ファイルの属性を読み取り専用ファイルに変更
//著者のPCではdos系のファイルシステムを使用しているので、「"dos:readonly"」のように変更したい属性を指定する
Files.setAttribute(path, "dos:readonly", true);
System.out.println("最終更新時刻: " + Files.getLastModifiedTime(path));
System.out.println("書き込み可能かどうか: " + Files.isWritable(path));
} catch (IOException e) {
e.printStackTrace();
}
}
}
以下のように、最終更新時刻と書き込み権限が変更されます。
最終更新時刻: 2021-04-29T10:51:40.406Z
書き込み可能かどうか: true
最終更新時刻: 2021-04-29T10:51:49.432Z
書き込み可能かどうか: false
今回はファイル属性を取得・変更する方法について解説しました。使う頻度は少ないかもしれませんが、ファイル属性などのメタデータ管理はデータマネジメントを行う上で欠かせないものであるので、必要なときに使えるようにしておくとよいでしょう。
関連記事:
【Java】java.nio.fileパッケージ(NIO.2)
【Java】Pathオブジェクトを生成する方法(java.nio.fileパッケージ)
【Java】java.nio.fileパッケージの使用例①(ファイルの作成、存在チェック)
【Java】java.nio.fileパッケージの使用例②(移動・コピー、削除)
【Java】FileChannelを使って高速にファイル入出力を行ってみた
【Java】java.io.Fileクラスの使い方(ファイル・ディレクトリ操作、パス、ファイル名、拡張子)
【Java】java.io.Fileクラスの使い方(ファイル一覧の取得、フィルタ)
【著者】
フォワードソフト株式会社のエンジニア。Java、Python、JavaScript、C#などの言語の他、クラウドやネットワーク技術を勉強しています。PythonやVBAを使った自動化で楽をする方法を考えるのが好きです。 最近はジェネレーティブAIの業務利用に関する検証を行っています。 資格を通じて知識を吸収することを心がけており、セキュリティスペシャリスト、データベーススペシャリスト、応用情報技術者、Oracle Certified Java Programmer Gold SE 11、Pythin3 エンジニア認定試験、HTML5プロフェッショナル認定試験レベル2、AWSプラクティショナーなどの情報資格を保有しています。
そのような方はぜひ、Workteriaサイトをご利用ください!
定期的にご本人に合う高額案件を紹介
リモートワークなど自由な働き方ができる案件多数
専属エージェントが契約や請求をトータルサポート
こんにちは。エンジニアの新田です!ここでは、システムエンジニアとして働いている私が、システム開発手法や開発言語について紹介していこうと思います。今回は、JSPの標準タグライブラリ「JSTL」について紹介します。Javaについて勉強している方、Webアプリケーションを構築したいと思っている方の参考になれば幸いです!関連記事リンク: 【Java】JSPの基本的な構文/【Java】JSPのアクションタグ
こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!そもそもStringとは何?『 String 』... Java言語において文字列のデータ型を指します。基本デ
こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!Stringクラスformatメソッドの文字列整形【java.utilパッケージ】Formatterクラスfo
こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者にも✅、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!文字列を扱う3つのクラス【java.langパッケージ】java.langパッケージの文字列を扱うクラスにはS
こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!プリミティブ型と参照型プログラム開発では型を持った変数を使ってデータのやり取りをしますが、データ型によって仕様