「ああ、リシ! こんにちは!」

「やあ、アミーゴ!人生はどう?」

「素晴らしいですね。Bilaabo は File についてたくさんの興味深いことと、その操作方法を教えてくれました。」

「たまたまですが、この話題について何か付け加えたいことがあると思います。」

「そうですか? それなら、私はすべて耳を傾けています。」

「わかりました、聞いてください。Java は常に進化しています。Java の開発者は、さまざまなことをより効率的に実行するための新しい方法を常に探しています。Java 7 では、File クラスに代替クラスが追加されました。」

ファイル、パス - 1

"別?"

「はい。彼らはFileクラスを基礎として、いくつかの新しいものを追加し、メソッドの名前を変更し、さらに 2 つに分割しました。つまり、PathFiles という2 つの新しいクラスができました。Path 実際には File の新しい類似物です。 "クラスであり、File はユーティリティ クラス (Arrays クラスや Collections クラスに似ています) です。File クラスのすべての静的メソッドはそこにあります。この方法で実行することは、OOP の観点からは「より正確」です。

「まあ、OOP に関することなら、それでいいでしょう。それで、何が変わったのでしょうか?」

「まず、 String オブジェクト とFileオブジェクトを返すメソッドを再現しないことにしました 。Pathクラスでは、すべてのメソッドがPath を返します。

「第二に、多くの静的ユーティリティ メソッドをFilesクラスに移動しました。」

「第三に、相対パスの操作がより便利になりました。」

「メソッドのリストは次のとおりです。」

Path クラスのメソッド 説明
boolean isAbsolute() パスが絶対パスの場合は true を返します。
Path getRoot() 現在のパスのルート、つまり最上位のディレクトリを返します。
Path getFileName() 現在のパスからファイル名を返します。
Path getParent() 現在のパスからディレクトリを返します。
boolean startsWith(Path other) 現在のパスが渡されたパスで始まるかどうかを確認します。
boolean endsWith(Path other) 現在のパスが渡されたパスで終わるかどうかを確認します。
Path normalize() 現在のパスを正規化します。たとえば、«c:/dir/dir2/../a.txt» を «c:/dir/a.txt» に変換します。
Path relativize(Path other) 2 つのパスの相対パス、つまり「パス間の差」を計算します。
Path resolve(String other) 現在のパスと相対パスを使用して絶対パスを解決します。
URI toUri() 現在のパス/ファイルの場合は URI を返します。
Path toAbsolutePath() パスが相対パスの場合は絶対パスに変換します。
File toFile() 現在の Path オブジェクトに対応する File オブジェクトを返します。

「そして、今の道は何ですか?」

「これは、メソッドが呼び出される Path オブジェクトのコンストラクターに渡されたパスです。」

「わかりました。では、Filesクラスにはどのようなメソッドがあるのでしょうか?」

「どこかに行くのに急いでいますか?今すぐ教えます。最も重要な方法は次のとおりです。」

Files クラスのメソッド 説明
Path createFile(…) ディスク上にファイルを作成します。
Path createDirectory(…) ディレクトリを作成します。
Path createDirectories(…) ディレクトリとそのすべてのサブディレクトリを作成します。
Path createTempFile(…) 一時ファイルを作成します。
Path createTempDirectory(…) 一時ディレクトリを作成します。
void delete(Path path) ファイルを削除します。
Path copy(Path source, Path target,…) ファイルをコピーします。
Path move(Path source, Path target,…) ファイルを移動します。
boolean isSameFile(Path, Path) 2 つのファイルを比較します。
boolean isDirectory(Path) パスはディレクトリですか?
boolean isRegularFile(Path) パスはファイルですか?
long size(Path) ファイルサイズを返します。
boolean exists(Path) 同じ名前のオブジェクトは存在しますか?
boolean notExists(Path) 同名のオブジェクトは存在しないのでしょうか?
long copy(InputStream, OutputStream) InputStream から OutputStream にバイトをコピーします。
long copy(Path, OutputStream) Path から OutputStream にすべてのバイトをコピーします。
long copy(InputStream, Path) InputStream からすべてのバイトを Path にコピーします。
byte[] read(InputStream, int initialSize) InputStream からバイトの配列を読み取ります。
byte[] readAllBytes(Path path) InputStream からすべてのバイトを読み取ります。
List<String> readAllLines(Path path,..) テキスト ファイルを読み取り、文字列のリストを返します。
Path write(Path path, byte[] bytes,…) バイト配列をファイルに書き込みます。

「なんて面白いのでしょう! たくさんの素晴らしい機能がすべて同じ場所にあります。」

「そうですね。インターネットからファイルをダウンロードして、それを誰かに送信したいとします。これを行うには、ディスク上に一時ファイルを作成し、読み取ったデータをそこに保存すると非常に便利です。」

「インターネットからファイルをダウンロードするのは難しいですか?」

「とても簡単です。この例を見てください。」

コード
URL url = new URL("https://www.google.com.ua/images/srpr/logo11w.png");
InputStream inputStream = url.openStream();

Path tempFile = Files.createTempFile("temp-",".tmp");
Files.copy(inputStream, tempFile);

"以上です?"

「はい、何を期待していましたか? 4 行しかありません。」

1行目。 画像ファイルのURLを渡すURLオブジェクトを作成します。

"行 2. ファイルを読み取るためのストリーム (InputStream) が URL オブジェクト上で開かれます。

"行 3。 このcreateTempFileメソッドは一時ファイルを作成するために使用されます。

4 行目。  Files.copy メソッドはデータを から にコピーします inputStream 。tempFileそれだけです。」

「独創的だ!」

「素晴らしいです。気に入っていただけて嬉しいです。残りの方法はあなた自身で見つけられると思います。そして、ディエゴにそれらに関するいくつかのタスクを与えるようお願いします。」

「ところで、この資料に関する良いリンクはここにあります」