日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java实现剪切MP3格式的文件_总结java中文件拷贝剪切的5种方式-JAVA IO基础总结第五篇...

發布時間:2024/3/26 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java实现剪切MP3格式的文件_总结java中文件拷贝剪切的5种方式-JAVA IO基础总结第五篇... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文是Java IO總結系列篇的第5篇,前篇的訪問地址如下:

很多朋友在看我的《java IO總結系列》之前覺得創建文件、文件夾刪除文件這些基礎操作真的是太簡單了。但看了我的文章之后,有小伙伴找到我說:“沒想到這么基礎的知識里面還有這么多的門門道道,用起來很容易,真的用好也不容易”。哪一個方法用起來簡單,哪一個方法在異常處理方面更加健壯,不看我的總結你可能還真的不知道。

有興趣的了解更多的小伙伴可以關注我,我會持續的寫這一系列的文章。如果您覺得我的文章對您有幫助,請幫忙點個贊,您的支持是我不竭的創作動力!

那我們下面就來為大家介紹本篇的內容:文件拷貝(重命名)與剪切的5種方法。首先我們來理解以下下面的幾個概念:

文件拷貝:將文件從一個文件夾復制到另一個文件夾

文件剪切:將文件從當前文件夾,移動到另一個文件夾

文件重命名:將文件在當前文件夾下面改名(也可以理解為將文件剪切為當前文件夾下面的另一個文件)

一、文件拷貝

傳統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路徑與參數文件名進行合并為一個新的文件路徑。

喜歡 (1)or分享 (0)

總結

以上是生活随笔為你收集整理的Java实现剪切MP3格式的文件_总结java中文件拷贝剪切的5种方式-JAVA IO基础总结第五篇...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。