我有一个从给定路径获取文件列表的方法。但如果我给出 D 或 C,则需要约 20 分钟才能获取所有文件列表。 Windows 文件搜索 ~1.5 分钟。我搜索了多线程 vs 但找不到有用的解决方案。
private static List<File> getFiles(String path) {
File[] arrayOfFile1;
File root = new File(path);
File[] list = root.listFiles();
if (list == null)
return null;
int j = (arrayOfFile1 = list).length;
for (int i = 0; i < j; ++i) {
File f = arrayOfFile1[i];
if ((f.isDirectory()) && (!(f.getName().equals(".svn")))) {
getFiles(f.getAbsolutePath());
} else if (!(f.getName().equals(".svn"))) {
sourceFiles.add(f.getAbsoluteFile());
}
}
return sourceFiles;
}
最佳答案
如果您使用 Java 7,请使用 FileVisitor
:
// "final" is necessary for below
final List<File> sourceFiles = new ArrayList<>();
Files.walkFileTree(Paths.get(path), new FileVisitor<Path>()
{
@Override
public FileVisitResult preVisitDirectory(final Path dir,
final BasicFileAttributes attrs)
throws IOException
{
return ".svn".equals(dir.getFileName())
? FileVisitResult.SKIP_SUBTREE
: FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(final Path file,
final BasicFileAttributes attrs)
throws IOException
{
sourceFiles.add(file.getAbsolutePath().toFile());
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(final Path file,
final IOException exc)
throws IOException
{
throw exc;
}
@Override
public FileVisitResult postVisitDirectory(final Path dir,
final IOException exc)
throws IOException
{
return FileVisitResult.CONTINUE;
}
});
关于java - 减少 Java 的操作时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22390488/