基于对以下问题的回答:List all files from a directory recursive with Java
我写了一个小 Filemover,它将递归地从一个目录中移动每个文件并将它们放在另一个目录的顶层。但由于某种原因,代码不会移动所有文件。我切换到使用 Files.move() 但绝对值得代码仍然没有正确地遍历目录树。现在我在尝试移动文件时收到java.nio.file.NoSuchFileException 。
堆栈跟踪说它是一个未知来源,但是当我查看文件是否在那里时。我已将问题隔离到Files.move()但我似乎无法解决它。我已经尝试过getPath()和getAbsolutePath()。更奇怪的是,我在排序程序中使用了类似的方法,而且效果很好。唯一的区别是我的源目录没有子目录。
我已经解决了部分树行走。这是因为我的 ImageFilter 只有小写扩展并且过滤器需要区分大小写。所以我在这里修好了。
好的,我将我的小 Filemover 切换回file.renameTo(),它现在可以正常工作了。它只是一个测试工具,用于将文件随机移动到我的图像分类器的放置目录中,因此不值得弄清楚为什么我没有收到此类文件异常。我只是将它修改为递归工作,因此如果有人在一堆图像上使用了错误的排序例程,它可以用来反转排序。
感谢你的帮助 :)
我有 3 节课
import java.io.File;
import java.util.Collection;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.DirectoryFileFilter;
import ca.fotonow.p3software.ImageFileFilter;
public class PSFileUtils {
public static Collection<File> listfiles(String directory) {
// TODO Auto-generated method stub
File dir= new File (directory);
dir.mkdirs(); //create directory if it doesn't exist.
Collection<File> files= FileUtils.listFiles(dir,new ImageFileFilter(),DirectoryFileFilter.DIRECTORY);
return files;
}
}
过滤器类
import java.io.File;
import java.io.FileFilter;
import org.apache.commons.io.filefilter.IOFileFilter;
public class ImageFileFilter implements IOFileFilter {
private final String filetypes[]= new String[] {"jpeg", "JPEG","jpg","JPG","tif","TIF","tiff","TIFF","raw","RAW"};
@Override
public boolean accept(File file) {
for (String ext: filetypes) {
if (file.getName().toLowerCase().endsWith(ext)) return true;
}
return false;
}
@Override
public boolean accept(File arg0, String arg1) {
// TODO Auto-generated method stub
return false;
}
}
主要班
import java.io.File;
import java.util.Collection;
import java.util.Date;
import java.util.Random;
import java.nio.file.Files;
import static java.nio.file.StandardCopyOption.*;
public class FileMover {
/**
* @param args
*/
public static void main(String[] args) {
//Move random number of files from one directory args[0] to another directory args[1]
//directories can be relative
//Repeats randomly until files are gone
String dir1=args[0];
String dir2=args[1];
Collection<File> files=PSFileUtils.listfiles(dir1);
for (File file: files) {
File newfile=new File(dir2+"/"+file.getName());
try {
Files.move(file.toPath(),newfile.toPath(), REPLACE_EXISTING);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println((new Date()).getTime()+ " "+ newfile.getName());
Random generator =new Random(new Date().getTime());
try {
Thread.sleep(generator.nextInt(5000));
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
知道我有什么问题吗?