我打算执行一个标准列表命令来获取 vector 或目录内容的列表。

我知道通过使用这很容易

File f = new File("C:/testDir");
File[] files = f.listFiles();

问题是我需要URL的列表/数组/vector 。所以我的想法是将文件转换为URL。使用org.apache.commons.io.FileUtils库,可以通过以下简单代码实现:
URL[] urls = FileUtils.toURLs(files);

这恰好满足了我的需要,但是不幸的是非常慢(特别是对于具有数千个文件的目录),尽管它只是使用for循环并使用“toURL()”方法解析每个单个File对象。

有人知道如何以更好的性能执行此任务吗?

最佳答案

唯一简单的优化是减少对象创建,这将适度提高性能。而不是使用listFiles()来创建整个File对象,而是使用list()获取仅包含文件名而不是路径的String数组,然后直接创建URL。在这种情况下,字符串的创建和存储将减少对象开销。字符串操作显然可以更快,更正确地进行,尽管它可能不会带来很大的不同。

就像是:

ArrayList<URL> urls = new ArrayList<URL>(); //or use an array if you prefer.
for(String name: f.files())
    urls.add(new URL("file://"+f.getPath()+"/"+name));

09-17 11:20
查看更多