今日はファイルのアトリビュートをまとめて設定してみましょう。
設定を行うインターフェース群は、すべて java.nio.file.attribute.AttributeView インターフェースの
継承関係にあります。
ファイルやディレクトリに対するアトリビュートを設定するために使用されるのがFileAttributeView
インターフェースです。
しかし、FileAttributeViewインターフェースにはメソッドが定義されていません。
実際には、用途ごとに定義されているFileAttributeViewインターフェースのサブインターフェースを
使用します。
BasicFileAttributeViewインターフェースはOSに依存しない共通のアトリビュートを設定するための
インターフェースです。
アトリビュートの取得に使用したBasicFileAttributesインターフェースに対応しており、
BasicFileAttributesインターフェースで取得できるアトリビュートを設定することができます。
そして、OSに依存したアトリビュートの設定を行うには、Windows用のDosFileAttributeView
インターフェース、POSIXに準拠したOS用のPosixFileAttributeViewインターフェースを使用します。
それぞれDosFileAttributesインターフェース、PosixFileAttributesインターフェースに対応してます。
PosixFileAttributeViewインターフェースはBasicFileAttributeViewインターフェースだけでなく、
FileOwnerAttributeViewインターフェースも継承しています。
FileOwnerAttributeViewインターフェースはオーナを設定するためのインターフェースです。
FileOwnerAttributeViewインターフェースのサブインターフェースはもう1つ、
AclFileAttributeViewインターフェースが提供されています。
インターフェース名のACLはAccess Control List (アクセス制御リスト)の略称です。
NIO.2のACLはRFC 3350: Network File System(NFS) version4 Protocol に基づいています。
これらのインターフェースのオブジェクトを取得するには、FilesクラスのgetFileAttributeView
メソッドを使用します。
getFileAttributeViewメソッドは、第1引数の型がPathインターフェース、
第2引数の型がClassクラス、第3引数は可変長引数でLinkOption列挙型になります。
取得したいインターフェースを第2引数に指定することで、オブジェクトを取得できます。
今回はDosFileAttributeViewインターフェースとPosixFileAttributeViewインターフェースの
オブジェクトを取得して、アトリビュートを設定してみます。
BasicFileAttributeViewインターフェースは最終更新日時、最終アクセス日、作成日時を設定する
setTimeメソッドを定義しています。
同様に、DosFileAttributeViewインターフェースはファイルをリードオンリーに設定する
setReadOnlyメソッド、隠しファイルに設定するsetHiddenメソッド、アーカイブファイルに設定する
setArchiveメソッド、そしてシステムファイルに設定するsetSystemメソッドなどを定義しています。
PosixFileAttributeViewインターフェースはパーミッションを設定するsetPermissionsメソッドと
グループを設定するsetGroupメソッドを定義しています。
また、PosixFileAttributeViewインターフェースのスーパーインターフェースである
FileOwnerAttributeViewインターフェースではオーナを設定するsetOwnerメソッドを定義してます。
では、まずWindowsで複数のアトリビュートをまとめて設定してみましょう。
// 対象となるパスPath path = Paths.get("var.txt");
// Windows用のDosFileAttributeViewオブジェクトを取得DosFileAttributeView view = Files.getFileAttributeView(path, DosFileAttributeView.class);
// BasicFileAttributeViewインターフェースで定義されたメソッドlong now = System.currentTimeMillis();view.setTime(FileTime.fromMillis(now), // 最終更新日時 FileTime.fromMillis(now), // 最終アクセス日時 FileTime.fromMillis(now)); // 作成日時
// DosFileAttributeViewインターフェースで定義されたメソッド// システムファイルとして設定するview.setSystem(true);
setTimeメソッドは、第1引数が最終更新日時、第2引数が最終アクセス日時、第3引数が
作成日時になります。これらの値を設定しない場合は、引数にnullを指定します。
そして、trueを引数にしてsetSystemメソッドをコールすることで、
ファイルをしsてむファイルとして設定しています。
同様に、PosixFileAttributeViewインターフェースを使用して、アトリビュートを設定してみます。
// 対象となるバスPath path = Paths.get("var.txt");
// POSIX準拠OS用のPosixFileAttributeViewオブジェクトを取得PosixFileAttributeView view = Files.getFileAttributeView(path, PosixFileAttributeView.class);
// BasicFileAttributeViewインターフェースで定義されたメソッドlong now = System.currentTimeMillis();view.setTimes(FileTime.fromMillis(now), // 最終更新日時 FileTime.fromMillis(now); // 最終アクセス日時 FileTime.fromMillis(now)); // 作成日時
// アカウントの情報を取得UserPrincipalLookupService lookupService = FileSystems.getDefault().getUserPrincipalLookupService();UserPrincipal owner = LookupService.loolupPrincipalByName("sakuraba");
// PosixFileAttributeViewインターフェースで定義されたメソッドview.setOwner(owner);
PosixFileAttributeViewインターフェースでは、オーナやグループを設定することができます。
オーナはUserPrincipalインターフェース、グループはGroupPrincipalインターフェースで表します。
いずれもUserPrincipalLookupServiceクラスを使用し、既存アカウントやグループから検索します。
UserPrincipalLookupServiceオブジェクトを取得するためには、
FileSystemクラスのgetUserPrincipalLookupServiceメソッドを使用します。
そして、UserPrincipalオブジェクトを検索するにはlookupPrincipalByNameメソッドを使用します。
引数は文字列でアカウント名を指定します。
GroupPricipalオブジェクトを検索するにはlookupPrincipalByGroupNameを使用します。
引数はグループ名です。
そして、得られたUserPrincipalオブジェクトをsetOwnerメソッドで指定します。
このようにAttributeViewインターフェースのサブインターフェース群を使用することで、
アトリビュートをまとめて設定することが可能です。
それでは今日はこの辺にしておきましょう。
それではまた!
人気ブログランキングへ
0 件のコメント:
コメントを投稿