Java SE7 Gold 取得を目指して (12)
Java SE7 Gold をとりたい…!
本日は第12回目です。
Java7で大きく変わったNIO.2の後編です。
今日のこぼれ話
NIOを勉強していて知ったのですが、Paths/Path のように複数形のクラス名がファクトリ、というのが慣習のようです。
- FileSystems → FileSystem
- Paths → Path
- Files → File
これに限らずUtil系のクラスも複数形ですね。
- Arrays
- Collections
ちょっとしたことですが、クラスの命名の際に役立つかもしれせん。
ところでNIO.2って何て読むのでしょう? えぬあいおーつー?
本日知ったこと(9章 2/2)
-
ディレクトリアクセス
- ルートディレクトリの取得
fs.getRootDirectories()
- 戻り値はItaratorで複数のドライブがあるような場合でも取得できる
- ディレクトリ内の中身リスト取得
Files.newDirectoryStream()
- 戻り値はItaratorでファイルやディレクトリのPathが入っている
- ルートディレクトリの取得
-
ファイルツリー探索
Files.walkFileTree()
- FileVisitorオブジェクトにコールバックを登録して、
walkFileTree()
に渡す - SimpleFileVisitorがAPIで提供されている
メソッド 概要 FileVisitResult preVisitDirectory(T dir, BasicFileAtttributes attr) エントリへのアクセス前行う操作 FileVisitResult visitFile(T file, BasicFileAttributes attr) ファイルに対して行う操作 FileVisitResult visitFileFailed(T file, IOException ex) ファイルにアクセスできない場合の操作 FileVisitResult postVisitDirectory(T dir, IOException ex) ディレクトリ内のすべてのエントリへのアクセス後に呼ばれる
エラーが発生している場合は例外が渡される -
ファイル探索
fs.getPathMatcher()
- 引数に
regex:{regex pattern}
orglog:{glob pattern}
を渡す - globは *.java とかできる コマンドでよく見る形式
-
matcher.matches(fileName)
で比較 -
newDirectoryStream(dir, "{glob pattern}")
でフィルタリング結果を得られる
-
ディレクトリ監視
- WatchServiceインタフェースを使用
- Pathインタフェースの
register(WatchService ws, WatchEvent.Kind<?>... events)
で登録
FileSystem fs = FileSystems.getDefault(); WatchService ws = fs.newWatchService(); path1.register(ws, StandardWatchEventKinds.ENTRY_CREATE); // ファイル作成を監 WatchKey key = ws.take(); // 待機 for(WatchEvent<?> event : key.pollEvents()) { // 発生したイベントの取り出し EatchEvent.Kind<?> kind = event.kind(); System.out.print(kind.name()); // イベント名取得 }
すべてにFileSystemインタフェースが絡んでいますね。ファイル関連の操作をしたくなったら、ひとまずFileSystemをあたってみるのがよさそうです。
Author And Source
この問題について(Java SE7 Gold 取得を目指して (12)), 我々は、より多くの情報をここで見つけました https://qiita.com/tomoki1207/items/bdc2c409349d26a84a03著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .