Cenário do projeto:
A prática do Java IO流
de copiar todos os arquivos em um diretório de nível único
Por exemplo: copie todos os arquivos da pasta do disco d para a pasta demo
do disco d e insira o código da seguinte forma:copydemo
public class CopyFolderDemo {
public static void main(String[] args) throws IOException{
// 封装数据源目录
File srcFolder = new File("d:\\demo");
// 封装目的地目录
File destFolder = new File("d:\\copydemo");
// 如果目的地文件夹不存在就创建
if (!destFolder.exists()) {
destFolder.mkdir();
}
// 获取数据源目录下的所有文件的File数组
File[] fileArray = srcFolder.listFiles();
// 遍历File数组得到每一个File对象
for (File file : fileArray) {
String name = file.getName(); // 获取文件名
File newFile = new File(destFolder, name); // 获取文件路径
copyFile(file, newFile);
}
}
private static void copyFile(File file, File newFile) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
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();
}
}
Observação:
Existem duas razões principais para usar fluxos de entrada e saída com buffer de byte no caso:
primeiro, é eficiente (em comparação com fluxos de entrada e saída de byte) e,
segundo, pode copiar qualquer tipo de arquivo, como txt, jpg, mp3, mp4, avi (em comparação com fluxos de entrada e saída de caracteres)
Referências:
Consulte o vídeo JavaSE de Liu Yi
Para copiar diretórios de vários níveis, você pode consultar os seguintes links e usar o pensamento recursivo:
Java implementa a cópia de todas as pastas e arquivos em diretórios de vários níveis