프로젝트 시나리오:
IO流
다단계 디렉토리의 모든 폴더와 파일을 복사하는 Java의 관행
예: demos
d 드라이브 아래의 폴더에 있는 모든 폴더와 파일을 copydemos
d 드라이브 아래의 폴더로 복사합니다.
요점: 폴더를 복사하고 递归
코드를 사용하여 다음을 입력합니다.
import java.io.*;
public class CopyFoldersDemo {
public static void main(String[] args) throws IOException {
// 封装数据源File
File srcFile = new File("d:\\demos");
// 封装目的地File
File destFile = new File("d:\\copydemos");
// 如果目的地文件夹不存在就创建
if (!destFile.exists()) {
destFile.mkdir();
}
// 复制文件夹的功能
copyFolder(srcFile, destFile);
}
private static void copyFolder(File srcFile, File destFile) throws IOException {
if (srcFile.isDirectory()) {
// 文件夹
File newFolder = new File(destFile, srcFile.getName());
newFolder.mkdir();
// 获取该File对象下的所有文件或文件夹File对象
File[] fileArray = srcFile.listFiles();
for (File file : fileArray) {
copyFolder(file, newFolder);
}
} else {
// 文件
File newFile = new File(destFile, srcFile.getName());
copyFile(srcFile, newFile);
}
}
private static void copyFile(File srcFile, File newFile) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFile));
byte[] bys = new byte[1024];
int len = 0;
while ((len = bis.read(bys)) != -1) {
bos.write(bys, 0, len);
}
bos.close();
bis.close();
}
}
주목:
이 경우 바이트 버퍼링된 입력 및 출력 스트림을 채택하는 두 가지 주요 이유가 있습니다.
첫째는 효율적이고(바이트 입력 및 출력 스트림에 비해) 둘째
, txt, jpg, mp3와 같은 모든 유형의 파일을 복사할 수 있습니다. , mp4, avi(문자 입력 및 출력 스트림과 비교)
Java는 단일 레벨 디렉토리의 모든 파일 복사를 구현합니다.
Liu Yi의 JavaSE 비디오를 참조하십시오.