package com.fwd.digui;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;
public class copyFile{
public static void main(String[] args) throws IOException {
System.out.println("输入要复制的文件夹");
File src = getDir();
System.out.println("输入要复制到目标目录");
File dest = getDir();
if (src.equals(dest)) {
System.out.println("目标文件是原文件夹");
}else{
copy(src,dest);
}
}
/**
* 统计文件的大小长度
* @param dir
* @return
*/
public static long getFileLength(File dir) {
//定义一个求和变量
long length = 0;
File[] files = dir.listFiles(); //获取该路径下的所有文件夹以及文件 listFiles();
for (File file : files) {
if (file.isFile()) {
length += file.length();
}else{
length = length+getFileLength(file);
}
}
return length;
}
/**
* 递归删除文件夹,以及文件
* @param dir
*/
private static void deleteFile(File dir) {
File[] list = dir.listFiles(); //获取目标文件夹下所有的文件和文件夹数组
for (File subFiles : list) { //遍历
if (subFiles.isFile()) { //判断
subFiles.delete(); //是文件就删除
}else{
deleteFile(subFiles); //是文件夹就遍历
}
}
dir.delete();
}
/**
* 文件复制
* @param src 原文件夹
* @param dest 目标文件夹
* @throws IOException
*/
private static void copy(File src, File dest) throws IOException {
//在目标文件夹中创建源文件夹
File newDir = new File(dest,src.getName());
newDir.mkdir();
//遍历目标文件夹,获取目标文件夹中的文件以及文件夹
File[] subFiles = src.listFiles(); //获取目标文件夹下的所有文件夹以及文件,返回的是一个File的数组
for (File subFile : subFiles) { //遍历数组
if (subFile.isFile()) {//判断是文件,就用IO流读取
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(subFile));
//将读取的文件用IO流写到要复制到目标文件
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(newDir,subFile.getName())));
int len;
while((len = bis.read())!=-1){
bos.write(len);
}
bis.close();//关流
bos.close();
}else{
//否则是是文件夹就调用递归
copy(subFile, newDir); //遍历是文件夹就是根目录 ,目标就是新创建的newDir
}
}
}
/**
* 获取文件夹路径
* @return
*/
private static File getDir() {
Scanner sc = new Scanner(System.in);
while(true){
String line = sc.nextLine();
File dir = new File(line);
if (!dir.exists()) {
System.out.println("文件夹路径不存在");
}else if(dir.isFile()){
System.out.println("输入的路径是文件");
}else{
return dir;
}
}
}
}
Java递归遍历删除拷贝文件以及获取文件夹大小
最新推荐文章于 2024-07-13 15:29:04 发布