java 获取一个文件夹内的各个文件大小并复制大于等于10k的文件 20

我这边有一个文件夹,里面有1万个PNG文件,现在要的是,复制出这个文件夹内大于等于10k的PNG文件。且复制出的PNG文件名称要和之前的是一样的。... 我这边有一个文件夹,里面有1万个PNG文件,现在要的是,复制出这个文件夹内大于等于10k的PNG文件。且复制出的PNG文件名称要和之前的是一样的。 展开
 我来答
涟漪海洋
2015-03-27 · TA获得超过236个赞
知道小有建树答主
回答量:242
采纳率:100%
帮助的人:200万
展开全部

只需要使用递归就可以了

import java.io.File;

public class Demo {
    public static void main(String[] args) {
        File fileDir = new File("C:/Users/Administrator/Desktop/prex");
        getFiles(fileDir);
    }

    public static void getFiles(File fileDir) {// 操作文件
        if (!fileDir.exists()) {
            new RuntimeException();
        }
        File[] files = fileDir.listFiles();
        if (files != null) {// 判断是否还有子目录
            for (int i = 0; i < files.length; i++) {
                if (files[i].isFile() && files[i].length() == 10 * 1024) {// 判断是文件,且大小为10k
                    files[i].renameTo(new File(// 转存储到指定的位置,名字和原来一样
                            "C:/Users/Administrator/Desktop/copy", files[i]
                                    .getName()));
                } else {
                    getFiles(files[i]);// 递归调用,直到所有的文件都没有了子目录
                }
            }
        }
    }
}


更多追问追答
追问
为什么你的代码也没有反应?
哭死 T^T
我的原文件夹路径是“E:\5171828375470284”
要复制到的文件夹是“E:\newPic”
根据我的需求,我改了你的代码
把 == 10*1024改为了 >=10*1024
把你的路径改为我需要的路径之后,控制台没有反应 T^T
追答
你先少弄几个文件测试下,这个不适合大数据量的操作
溅人丶就是矫情
2015-03-27 · TA获得超过270个赞
知道小有建树答主
回答量:312
采纳率:0%
帮助的人:80万
展开全部
package x.y.nio;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;

public class Demo {
    private static void copy(File file, String dest){
        if(file.isDirectory()){//如果是目录
            File[] files = file.listFiles();
            for(File f : files){//遍历目录下所有文件
                copy(f, dest);
            }
        //如果文件大于等于10k,且是png格式,复制到dest目录
        }else if(file.length() >= (1024 * 10) && (file.getName().endsWith("png") || file.getName().endsWith("PNG"))){
            File d = new File(dest);
            if(!d.exists()){
                d.mkdirs();
            }
            
            FileInputStream fis = null;
            FileChannel in = null;
            
            FileOutputStream fos = null;
            FileChannel out = null;
            try {
                fis = new FileInputStream(file);
                in = fis.getChannel();
                
                fos = new FileOutputStream(new File(dest + "/" + file.getName()));
                out = fos.getChannel();
                
                in.transferTo(0, file.length(), out);
                //System.out.println("复制:" + file.getName() + " 成功");
            } catch (IOException e) {
                System.out.println("复制:" + file.getName() + " 失败");
            }finally{
                try {
                    fis.close();
                    in.close();
                    fos.close();
                    out.close();
                } catch (IOException e) {
                    
                    e.printStackTrace();
                }
                
            }
            
        }
    }
    
    public static void main(String[] args) throws IOException {
        copy(new File("E:/qq"), "E:/dest");
    }
}


看了楼上写的,发现有一些问题:

1:文件应该是大于等于10K,而不是等于10K;

2:renameTo()方法是移动文件,不是复制,会把原来的删掉,和楼主说的复制有出入。

更多追问追答
追问


其实我这里面都是png,所以,判断哪个是否是png,那句不用要的。


我的原文件夹路径是“E:\5171828375470284”
要复制到的文件夹是“E:\newPic”
根据我的需求,我改了你的代码

但是,为什么我运行了控制台没有反应,哭死 T^T,求教啊。

追答
这问题有很多,有可能是文件太多,需要时间;
如果你不是一定要用复制的话,可以用楼上那个代码,使用renameTo速度应该会快一点;
还有就是最好在同一个盘进行复制。跨盘操作会很慢。

E:\5171828375470284 这个要写成:E:/5171828375470284 是这样的///////////////////////
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式