Java實現(xiàn)文件復(fù)制及文件夾復(fù)制幾種常用的方式
在Java中,有多種方法可以實現(xiàn)文件的復(fù)制。以下是幾種常用的方式:
使用字節(jié)流進行復(fù)制:
通過FileInputStream和FileOutputStream分別創(chuàng)建源文件和目標文件的輸入輸出流,然后通過循環(huán)讀取源文件內(nèi)容,并將數(shù)據(jù)寫入目標文件中進行復(fù)制。
可以使用字節(jié)數(shù)組作為緩沖區(qū),提高復(fù)制效率。
需要手動處理流的打開、關(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();
}
}
}使用字符流進行復(fù)制:
通過FileReader和FileWriter分別創(chuàng)建源文件和目標文件的字符流,然后通過循環(huán)讀取源文件內(nèi)容,并將數(shù)據(jù)寫入目標文件中進行復(fù)制。
可以使用字符數(shù)組作為緩沖區(qū),提高復(fù)制效率。
需要手動處理流的打開、關(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(),可以直接將一個文件復(fù)制到目標位置。
可以使用StandardCopyOption枚舉類指定復(fù)制選項,例如REPLACE_EXISTING用于覆蓋已存在的目標文件。
相對于字節(jié)流和字符流,使用Files.copy()方法更簡潔方便。
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é)合通道進行復(fù)制:
使用FileChannel來處理源文件和目標文件的通道,通過調(diào)用源文件通道的transferTo()或transferFrom()方法,將數(shù)據(jù)從源文件傳輸?shù)侥繕宋募?/p>
這種方式可以利用底層操作系統(tǒng)提供的文件復(fù)制機制,性能較高。
需要手動處理通道和流的打開、關(guān)閉和異常處理。
(transferTo(OutputStream out) 此方法是java9 新方法,直接實現(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();
}
}
}使用第三方庫:
Java中有一些第三方庫可以簡化文件復(fù)制操作,例如 Apache Commons IO 的FileUtils類提供了多個便捷的方法用于復(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()方法中,我們首先檢查目標目錄是否存在,如果不存在,則創(chuàng)建該目錄。
// 然后遍歷源目錄下的所有文件和子目錄,根據(jù)文件類型調(diào)用copyDirectory()或copyFile()方法進行復(fù)制操作。
// 對于子目錄,遞歸調(diào)用copyDirectory()方法;對于文件,調(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ù)制到目標文件中。
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實現(xiàn)文件復(fù)制及文件夾復(fù)制幾種常用的方式的文章就介紹到這了,更多相關(guān)Java文件復(fù)制及文件夾復(fù)制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何在 Spring Boot 中配置和使用 CSRF 保護
CSRF是一種網(wǎng)絡(luò)攻擊,它利用已認證用戶的身份來執(zhí)行未經(jīng)用戶同意的操作,Spring Boot 提供了內(nèi)置的 CSRF 保護機制,可以幫助您防止這種類型的攻擊,這篇文章主要介紹了Spring?Boot?中的?CSRF?保護配置的使用方法,需要的朋友可以參考下2023-09-09
在MyBatis中使用 # 和 $ 書寫占位符的區(qū)別說明
這篇文章主要介紹了在MyBatis中使用 # 和 $ 書寫占位符的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10
SpringBoot自動配置Quartz的實現(xiàn)步驟
本文主要介紹了SpringBoot自動配置Quartz的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11

