java - 减少 Java 的操作时间

标签 java multithreading file search

我有一个从给定路径获取文件列表的方法。但如果我给出 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/

相关文章:

java - 如何有条件地添加(或修改)ContextConfigLocation 到 web.xml?

java - R 中的 MemoryError while read.xlsx

C++ 需要线程安全的经过良好测试的容器(非微软)

java - 多线程降低了 NUMA 上的套接字吞吐量

linux - 如何在 unix 操作系统中搜索文件中不包含特定字符串的行?

java - 由 : java. 引起 lang.ClassNotFoundException: 没有找到类 "okhttp3.internal.Platform"

java - 如何在 java 中运行 comport 代码而不在 linux 系统中物理运行它

c# - ConcurrentQueue <T>或Queue <T>当一个线程仅入队而另一个线程仅出队

java - 如何使文件加密?

java开发在linux下设置路径