Java SE 7よりも前のリリースでは、ファイルI/Oのメカニズムとしてjava.io.File
クラスが使用されていましたが、このクラスには以下のようないくつかの欠点があります。
rename
メソッドの動作が、プラットフォーム間で一貫していない。
File
の多くのメソッドにスケーラビリティがない。 大きなディレクトリのリスト作成をサーバーにリクエストすると、ハングすることがある。 大きなディレクトリによってメモリ・リソースの問題が発生し、結果としてサービスが拒否されることがある。
旧来のコードでjava.io.File
を使用していて、そのコードへの影響を最小限に抑えつつjava.nio.file.Path
の機能を活用したいとお考えではないでしょうか。
java.io.File
クラスにはtoPath
メソッドが用意されています。このメソッドを次のように使用すると、古いスタイルのFile
インスタンスを、java.nio.file.Path
インスタンスに変換できます。
Path input = file.toPath();
これにより、Path
クラスの豊富な機能セットを活用できるようになります。
たとえば、ファイルを削除する次のようなコードがあるとします。
file.delete();
このコードは、Files.delete
メソッドを使用して次のように変更できます。
Path fp = file.toPath(); Files.delete(fp);
これとは逆に、Path.toFile
メソッドは、Path
オブジェクトを表すjava.io.File
オブジェクトを構成します。
ファイルI/OのJava実装はJava SE 7リリースで完全に再構築されたため、メソッドを他のメソッドに単純に入れ替えるということはできません。 java.nio.file
パッケージの豊富な機能を使用するには、前述のとおり、File.toPath
メソッドを使用する方法がもっとも簡単です。 ただし、この方法の使用が望ましくない場合や、この方法ではニーズを満たせない場合は、ファイルI/Oコードを再記述する必要があります。
java.io.File
APIとjava.nio.file
APIには、1対1の対応関係はありませんが、次の表に、この2つのAPI間の機能の対応関係に関する一般的な考え方と詳細情報の参照先を示しています。
java.io.File機能 | java.nio.file機能 | チュートリアルの関連セクション |
---|---|---|
java.io.File |
java.nio.file.Path |
Pathクラス |
java.io.RandomAccessFile |
SeekableByteChannel の機能 |
ランダム・アクセス・ファイル |
File.canRead 、canWrite 、canExecute |
Files.isReadable 、Files.isWritable 、Files.isExecutable UNIXファイル・システムでは、ファイル属性パッケージを使用して9つのファイル権限を確認 |
ファイルやディレクトリのチェック メタデータの管理 |
File.isDirectory() 、File.isFile() 、File.length() |
Files.isDirectory(Path, LinkOption...) 、Files.isRegularFile(Path, LinkOption...) 、Files.size(Path) |
メタデータの管理 |
File.lastModified() 、File.setLastModified(long)
| Files.getLastModifiedTime(Path, LinkOption...) 、Files.setLastMOdifiedTime(Path, FileTime)
| メタデータの管理 |
さまざまな属性を設定するFile のメソッド: setExecutable 、setReadable 、setReadOnly 、setWritable |
Files のsetAttribute(Path, String, Object, LinkOption...) メソッドに置換
|
メタデータの管理 |
new File(parent, "newfile") |
parent.resolve("newfile") |
パス操作 |
File.renameTo |
Files.move |
ファイルやディレクトリの移動 |
File.delete |
Files.delete |
ファイルやディレクトリの削除 |
File.createNewFile |
Files.createFile |
ファイルの作成 |
File.deleteOnExit |
createFile メソッドで指定するDELETE_ON_CLOSE オプションに置換 |
ファイルの作成 |
File.createTempFile |
Files.createTempFile(Path, String, FileAttributes<?>) 、Files.createTempFile(Path, String, String, FileAttributes<?>)
|
ファイルの作成 ストリームI/Oを使用したファイルの作成と書込み チャネルI/Oを使用したファイルの読取りと書込み |
File.exists |
Files.exists 、Files.notExists |
ファイルまたはディレクトリの存在チェック |
File.compareTo 、equals |
Path.compareTo 、equals |
2つのパスの比較 |
File.getAbsolutePath 、getAbsoluteFile |
Path.toAbsolutePath |
パスの変換 |
File.getCanonicalPath 、getCanonicalFile |
Path.toRealPath またはnormalize |
パスの変換(toRealPath )パスの冗長部分の削除( normalize ) |
File.toURI |
Path.toURI |
パスの変換 |
File.isHidden |
Files.isHidden |
パスに関する情報の取得 |
File.list 、listFiles |
Path.newDirectoryStream |
ディレクトリの内容リストの取得 |
File.mkdir 、mkdirs |
Path.createDirectory |
ディレクトリの作成 |
File.listRoots |
FileSystem.getRootDirectories |
ファイル・システムのルート・ディレクトリ・リストの取得 |
File.getTotalSpace 、File.getFreeSpace 、File.getUsableSpace |
FileStore.getTotalSpace 、FileStore.getUnallocatedSpace 、FileStore.getUsableSpace 、FileStore.getTotalSpace |
ファイル・ストア属性 |