“哦,Rishi!嗨!”
“嗨,阿米戈!生活怎麼樣?”
“太好了。Bilaabo 剛剛告訴我一些關於 File 的有趣事情,以及如何使用它。”
“碰巧的是,我想我有一些關於這個話題的補充。”
“真的嗎?那我洗耳恭聽。”
“好吧,聽著。Java 在不斷發展。它的開發人員一直在尋找新的方法來更有效地做不同的事情。在 Java 7 中,他們添加了一個替代 File 類的方法。”
“選擇?”
“是的。他們以File類為基礎,添加了一些新東西,重命名了方法,然後也將其拆分為兩個。所以現在有兩個新類:Path和Files。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) |
計算兩條路徑的相對路徑,即«路徑之間的差異» |
Path resolve(String other) |
使用當前路徑和相對路徑解析絕對路徑。 |
URI toUri() |
如果是當前路徑/文件,則返回 URI。 |
Path toAbsolutePath() |
如果是相對路徑,則將路徑轉換為絕對路徑。 |
File toFile() |
返回對應於當前 Path 對象的 File 對象。 |
“而現在的道路——那是什麼?”
“這是傳遞給正在調用其方法的 Path 對象的構造函數的路徑。”
“好的。那麼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) |
比較兩個文件。 |
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) |
將路徑中的所有字節複製到 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 行。 在 url 對像上打開用於讀取文件的流 (InputStream)。
"第 3 行。 該createTempFile
方法用於創建臨時文件。
“第 4 行 。Files.copy 方法將數據從復製 inputStream
到tempFile
。就是這樣。”
“巧妙!”
“太好了,很高興你喜歡。剩下的方法我想你可以自己想出來。我會讓迪亞哥給你分幾個任務。”
“順便說一下,這裡有一個關於此材料的好鏈接”
GO TO FULL VERSION