Java递归遍历删除拷贝文件以及获取文件夹大小

    xiaoxiao2021-12-14  23

    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; } } } }
    转载请注明原文地址: https://ju.6miu.com/read-970963.html

    最新回复(0)