我打算执行标准列表命令来获取目录内容的向量或列表.
我知道这很容易使用
File f = new File("C:/testDir");
File[] files = f.listFiles();
Run Code Online (Sandbox Code Playgroud)
问题是我需要一个列表/数组/向量的URL.所以我的想法是将文件转换为URL.使用org.apache.commons.io.FileUtils库,可以使用以下简单代码:
URL[] urls = FileUtils.toURLs(files);
Run Code Online (Sandbox Code Playgroud)
这正是我所需要的,但遗憾的是很慢(特别是对于包含数千个文件的目录),尽管它只是使用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));
Run Code Online (Sandbox Code Playgroud)