java 获取一个文件夹内的各个文件大小并复制大于等于10k的文件 20
只需要使用递归就可以了
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
你先少弄几个文件测试下,这个不适合大数据量的操作
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()方法是移动文件,不是复制,会把原来的删掉,和楼主说的复制有出入。
这问题有很多,有可能是文件太多,需要时间;
如果你不是一定要用复制的话,可以用楼上那个代码,使用renameTo速度应该会快一点;
还有就是最好在同一个盘进行复制。跨盘操作会很慢。
E:\5171828375470284 这个要写成:E:/5171828375470284 是这样的///////////////////////