Java實(shí)現(xiàn)文件復(fù)制及文件夾復(fù)制幾種常用的方式
在Java中,有多種方法可以實(shí)現(xiàn)文件的復(fù)制。以下是幾種常用的方式:
使用字節(jié)流進(jìn)行復(fù)制:
通過(guò)FileInputStream和FileOutputStream分別創(chuàng)建源文件和目標(biāo)文件的輸入輸出流,然后通過(guò)循環(huán)讀取源文件內(nèi)容,并將數(shù)據(jù)寫入目標(biāo)文件中進(jìn)行復(fù)制。
可以使用字節(jié)數(shù)組作為緩沖區(qū),提高復(fù)制效率。
需要手動(dòng)處理流的打開(kāi)、關(guān)閉和異常處理。
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class ByteStreamCopyExample { public static void main(String[] args) { String sourceFilePath = "source.txt"; String destinationFilePath = "destination.txt"; try (FileInputStream fis = new FileInputStream(sourceFilePath); FileOutputStream fos = new FileOutputStream(destinationFilePath)) { byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = fis.read(buffer)) != -1) { fos.write(buffer, 0, bytesRead); } System.out.println("文件復(fù)制成功!"); } catch (IOException e) { e.printStackTrace(); } } }
使用字符流進(jìn)行復(fù)制:
通過(guò)FileReader和FileWriter分別創(chuàng)建源文件和目標(biāo)文件的字符流,然后通過(guò)循環(huán)讀取源文件內(nèi)容,并將數(shù)據(jù)寫入目標(biāo)文件中進(jìn)行復(fù)制。
可以使用字符數(shù)組作為緩沖區(qū),提高復(fù)制效率。
需要手動(dòng)處理流的打開(kāi)、關(guān)閉和異常處理。
import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class CharacterStreamCopyExample { public static void main(String[] args) { String sourceFilePath = "source.txt"; String destinationFilePath = "destination.txt"; try (FileReader fr = new FileReader(sourceFilePath); FileWriter fw = new FileWriter(destinationFilePath)) { char[] buffer = new char[1024]; int charsRead; while ((charsRead = fr.read(buffer)) != -1) { fw.write(buffer, 0, charsRead); } System.out.println("文件復(fù)制成功!"); } catch (IOException e) { e.printStackTrace(); } } }
使用Files類的copy()方法:
在Java的NIO包中,提供了Files類的靜態(tài)方法copy(),可以直接將一個(gè)文件復(fù)制到目標(biāo)位置。
可以使用StandardCopyOption枚舉類指定復(fù)制選項(xiàng),例如REPLACE_EXISTING用于覆蓋已存在的目標(biāo)文件。
相對(duì)于字節(jié)流和字符流,使用Files.copy()方法更簡(jiǎn)潔方便。
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class Text6 { public static void main(String[] args) { try (FileInputStream fis = new FileInputStream("user.txt"); FileOutputStream fos = new FileOutputStream("user1.txt")) { fis.transferTo(fos); System.out.println("文件復(fù)制成功!"); } catch (IOException e) { e.printStackTrace(); } } }
使用Files類的copy()方法結(jié)合通道進(jìn)行復(fù)制:
使用FileChannel來(lái)處理源文件和目標(biāo)文件的通道,通過(guò)調(diào)用源文件通道的transferTo()或transferFrom()方法,將數(shù)據(jù)從源文件傳輸?shù)侥繕?biāo)文件。
這種方式可以利用底層操作系統(tǒng)提供的文件復(fù)制機(jī)制,性能較高。
需要手動(dòng)處理通道和流的打開(kāi)、關(guān)閉和異常處理。
(transferTo(OutputStream out) 此方法是java9 新方法,直接實(shí)現(xiàn)復(fù)制文件。 )
import java.io.IOException; import java.nio.channels.FileChannel; import java.nio.file.Path; import java.nio.file.StandardCopyOption; public class ChannelCopyExample { public static void main(String[] args) { Path sourceFilePath = Path.of("source.txt"); Path destinationFilePath = Path.of("destination.txt"); try (FileChannel sourceChannel = FileChannel.open(sourceFilePath); FileChannel destinationChannel = FileChannel.open(destinationFilePath, StandardOpenOption.CREATE, StandardOpenOption.WRITE, StandardOpenOption.TRUNCATE_EXISTING)) { destinationChannel.transferFrom(sourceChannel, 0, sourceChannel.size()); System.out.println("文件復(fù)制成功!"); } catch (IOException e) { e.printStackTrace(); } } }
使用第三方庫(kù):
Java中有一些第三方庫(kù)可以簡(jiǎn)化文件復(fù)制操作,例如 Apache Commons IO 的FileUtils類提供了多個(gè)便捷的方法用于復(fù)制文件或目錄。
import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; public class ApacheCommonsIOCopyExample { public static void main(String[] args) { File sourceFile = new File("source.txt"); File destinationFile = new File("destination.txt"); try { FileUtils.copyFile(sourceFile, destinationFile); System.out.println("文件復(fù)制成功!"); } catch (IOException e) { e.printStackTrace(); } } }
目錄(文件夾)復(fù)制
import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.StandardCopyOption; public class Text7 { public static void main(String[] args) { File sourceDir = new File("D:\\A---webdate"); File destinationDir = new File("D:\\A---webdate1"); try { copyDirectory(sourceDir, destinationDir); System.out.println("目錄復(fù)制成功!"); } catch (IOException e) { e.printStackTrace(); } } //在copyDirectory()方法中,我們首先檢查目標(biāo)目錄是否存在,如果不存在,則創(chuàng)建該目錄。 // 然后遍歷源目錄下的所有文件和子目錄,根據(jù)文件類型調(diào)用copyDirectory()或copyFile()方法進(jìn)行復(fù)制操作。 // 對(duì)于子目錄,遞歸調(diào)用copyDirectory()方法;對(duì)于文件,調(diào)用copyFile()方法。 public static void copyDirectory(File sourceDir, File destinationDir) throws IOException { if (!destinationDir.exists()) { destinationDir.mkdirs(); } File[] files = sourceDir.listFiles(); if (files != null) { for (File file : files) { File destinationFile = new File(destinationDir, file.getName()); if (file.isDirectory()) { copyDirectory(file, destinationFile); } else { copyFile(file, destinationFile); } } } } //在copyFile()方法中,我們使用Files.copy()方法將源文件的內(nèi)容復(fù)制到目標(biāo)文件中。 public static void copyFile(File sourceFile, File destinationFile) throws IOException { Files.copy(sourceFile.toPath(), destinationFile.toPath(), StandardCopyOption.REPLACE_EXISTING); // 這里可以使用你前面提到的復(fù)制文件的方法,如 transferTo() 或者使用緩沖區(qū)的方式復(fù)制 } }
總結(jié)
到此這篇關(guān)于Java實(shí)現(xiàn)文件復(fù)制及文件夾復(fù)制幾種常用的方式的文章就介紹到這了,更多相關(guān)Java文件復(fù)制及文件夾復(fù)制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- java復(fù)制文件的4種方式及拷貝文件到另一個(gè)目錄下的實(shí)例代碼
- 4種java復(fù)制文件的方式
- Java實(shí)現(xiàn)文件或文件夾的復(fù)制到指定目錄實(shí)例
- java實(shí)現(xiàn)文件復(fù)制、剪切文件和刪除示例
- Java復(fù)制文件常用的三種方法
- Java實(shí)現(xiàn)復(fù)制文件并命名的超簡(jiǎn)潔寫法
- java 實(shí)現(xiàn)文件復(fù)制和格式更改的實(shí)例
- java遞歸實(shí)現(xiàn)復(fù)制一個(gè)文件夾下所有文件功能
- java實(shí)現(xiàn)文件復(fù)制上傳操作
相關(guān)文章
maven查看依賴樹(shù)的方法實(shí)現(xiàn)
Maven依賴樹(shù)是以當(dāng)前項(xiàng)目的POM文件為根節(jié)點(diǎn),列出了所有直接或間接依賴的依賴樹(shù)結(jié)構(gòu),本文就詳細(xì)的來(lái)介紹一下如何查看,感興趣的可以了解一下2023-08-08Java使用Math.random()結(jié)合蒙特卡洛方法計(jì)算pi值示例
這篇文章主要介紹了Java使用Math.random()結(jié)合蒙特卡洛方法計(jì)算pi值的方法,簡(jiǎn)單說(shuō)明了結(jié)合具體實(shí)例蒙特卡洛方法的原理,并結(jié)合具體實(shí)例形式分析了java使用蒙特卡洛方法計(jì)算PI值的操作技巧,需要的朋友可以參考下2017-09-09java?web實(shí)現(xiàn)簡(jiǎn)單登錄注冊(cè)功能全過(guò)程(eclipse,mysql)
前期我們學(xué)習(xí)了javaweb項(xiàng)目用JDBC連接數(shù)據(jù)庫(kù),還有數(shù)據(jù)庫(kù)的建表功能,下面這篇文章主要給大家介紹了關(guān)于java?web實(shí)現(xiàn)簡(jiǎn)單登錄注冊(cè)功能的相關(guān)資料,需要的朋友可以參考下2022-07-07Java中的Web MVC簡(jiǎn)介_(kāi)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
MVC模型是一種架構(gòu)型的模式,本身不引入新功能,只是幫助我們將開(kāi)發(fā)的結(jié)構(gòu)組織的更加合理,使展示與模型分離、流程控制邏輯、業(yè)務(wù)邏輯調(diào)用與展示邏輯分離2017-09-09java 輸入一個(gè)數(shù)字,反轉(zhuǎn)輸出這個(gè)數(shù)字的值(實(shí)現(xiàn)方法)
下面小編就為大家?guī)?lái)一篇java 輸入一個(gè)數(shù)字,反轉(zhuǎn)輸出這個(gè)數(shù)字的值(實(shí)現(xiàn)方法)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-10-10