亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中文件拷貝剪切的方式有哪些

發布時間:2021-11-30 13:59:58 來源:億速云 閱讀:163 作者:iii 欄目:大數據

這篇文章主要講解了“java中文件拷貝剪切的方式有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“java中文件拷貝剪切的方式有哪些”吧!

一、文件拷貝

傳統IO中的文件copy的方法,使用輸入輸出流,實際上就是重新創建并寫入一個文件。如果目標文件已經存在,就覆蓋掉它,重新創建一個文件并寫入數據。這種方式不夠友好,覆蓋掉原有文件沒有給出任何提示,有可能導致原有數據的丟失

@Test
void testCopyFile1() throws IOException {
  File fromFile = new File("D:\\data\\test\\newFile.txt");
  File toFile = new File("D:\\data\\test2\\copyedFile.txt");

  try(InputStream inStream = new FileInputStream(fromFile);
      OutputStream outStream = new FileOutputStream(toFile);) {

    byte[] buffer = new byte[1024];

    int length;
    while ((length = inStream.read(buffer)) > 0) {
      outStream.write(buffer, 0, length);
      outStream.flush();
    }

  }
}

Java NIO中文件copy的方法,使用方式簡單。當目標文件已經存在的時候會拋出FileAlreadyExistsException ,當源文件不存在的時候拋出NoSuchFileException,針對不同的異常場景給出不同的Exception,更有利于我們寫出健壯性更好的程序。

@Test
void testCopyFile2() throws IOException {
  Path fromFile = Paths.get("D:\\data\\test\\newFile.txt");
  Path toFile = Paths.get("D:\\data\\test2\\copyedFile.txt");

  Files.copy(fromFile, toFile);
}

如果在目標文件已經存在的情況下,你不想拋出FileAlreadyExistsException ,而是去覆蓋它,也可以靈活的選擇使用下面的選項

  • StandardCopyOption.REPLACE_EXISTING 來忽略文件已經存在的異常,如果存在就去覆蓋掉它

//如果目標文件存在就替換它
Files.copy(fromFile, toFile, StandardCopyOption.REPLACE_EXISTING);
  • StandardCopyOption.COPY_ATTRIBUTES copy文件的屬性,最近修改時間,最近訪問時間等信息,不僅copy文件的內容,連文件附帶的屬性一并復制

CopyOption[] options = { StandardCopyOption.REPLACE_EXISTING,
      StandardCopyOption.COPY_ATTRIBUTES //copy文件的屬性,最近修改時間,最近訪問時間等
};
Files.copy(fromFile, toFile, options);

二、文件重命名

NIO中可以使用Files.move方法在同一個文件夾內移動文件,并更換名字。當目標文件已經存在的時候,同樣會有FileAlreadyExistsException,也同樣可以使用StandardCopyOption去處理該異常。

@Test
void testRenameFile() throws IOException {
  Path source = Paths.get("D:\\data\\test\\newFile.txt");
  Path target = Paths.get("D:\\data\\test\\renameFile.txt");

  //REPLACE_EXISTING文件存在就替換它
  Files.move(source, target,StandardCopyOption.REPLACE_EXISTING);
}

下文中的實現方法和上面代碼的效果是一樣的,resolveSibling作用是將source文件的父路徑與參數文件名合并為一個新的文件路徑。

resolve系列函數在windows和linux等各種系統處理路徑分隔符號、路徑與文件名合并等,比自己手寫代碼去處理不同操作系統的路徑分隔符號、路徑與文件名合并有更好的操作系統兼容性。

@Test
void testRenameFile2() throws IOException {
  Path source = Paths.get("D:\\data\\test\\newFile.txt");

  //這種寫法就更加簡單,兼容性更好
  Files.move(source, source.resolveSibling("renameFile.txt"));
}

傳統IO中使用File類的renameTo方法重命名,失敗了就返回false,沒有任何異常拋出。你不會知道你失敗的原因是什么,是因為源文件不存在導致失敗?還是因為目標文件已經存在導致失敗?所以這種方法筆者不建議使用。

@Test
void testRenameFile3() throws IOException {

  File source = new File("D:\\data\\test\\newFile.txt");
  boolean succeeded = source.renameTo(new File("D:\\data\\test\\renameFile.txt"));
  System.out.println(succeeded);  //失敗了false,沒有異常
}

三、文件剪切

文件剪切實際上仍然是Files.move,如果move的目標文件夾不存在或源文件不存在,都會拋出NoSuchFileException

@Test
void testMoveFile() throws IOException {

  Path fromFile = Paths.get("D:\\data\\test\\newFile.txt"); //文件
  Path anotherDir = Paths.get("D:\\data\\test\\anotherDir"); //目標文件夾

  Files.createDirectories(anotherDir);
  Files.move(fromFile, anotherDir.resolve(fromFile.getFileName()),
          StandardCopyOption.REPLACE_EXISTING);
}

resolve函數是解析anotherDir路徑與參數文件名進行合并為一個新的文件路徑。

感謝各位的閱讀,以上就是“java中文件拷貝剪切的方式有哪些”的內容了,經過本文的學習后,相信大家對java中文件拷貝剪切的方式有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南宫市| 苏尼特右旗| 星子县| 湖北省| 合肥市| 宜宾市| 通山县| 万源市| 汤原县| 定边县| 项城市| 杭锦旗| 红河县| 文登市| 镇宁| 武宁县| 高台县| 莲花县| 绿春县| 甘南县| 吉首市| 沙雅县| 朝阳县| 道孚县| 开阳县| 深水埗区| 桂阳县| 南和县| 沧州市| 永济市| 莱阳市| 江华| 丹棱县| 黑水县| 宁陵县| 鹿邑县| 绩溪县| 克拉玛依市| 阿拉善盟| 大兴区| 边坝县|