我有一个用于文件删除的简单函数,
它会检查文件大小,
如果小于特定值,则删除文件
然而,这个函数将被称为千次
每次都是新文件实例,
我认为文件对象创建问题会很昂贵,
还有其他方法可以解决这个问题吗?
public void checkFile(String filePath) {
File file = new File(filePath); //this is expensive
if (file.length() < 500) {
file.delete();
}
}
答案 0 :(得分:5)
与检查磁盘上的文件大小相比,对new File()
性能的影响微乎其微。别担心。
如果你真的认为它会有所作为,测量它然后进行优化。
答案 1 :(得分:0)
恕我直言“思考”不够好;您是否真的确定File
对象创建是您应用程序的瓶颈?无论如何,我不认为你可以在不创建File对象的情况下删除文件,除非你打算编写自己的“本机”方法,只需将文件路径作为字符串取消链接文件。
答案 2 :(得分:0)
标准java API不允许这样做。现代计算机几千次几乎没有。创建java.io.File
实例比删除花费的时间少,所以不要担心。如果您发现此代码有任何问题,可以将缓存创建为Map<String, File>
并从那里获取文件实例。
但是,除非你发现这是你的问题,否则不要这样做。没有预先成熟的优化!
答案 3 :(得分:0)
为什么代码会很昂贵?由于代际GC,用Java创建临时对象不再昂贵。 File只是一个封装文件系统路径的对象。创建一个并不昂贵。
答案 4 :(得分:0)
无法删除纯Java中不需要创建File
对象的文件。不纯的替代品是:
unlink
或Window等效的本机代码,rm
或del
命令作为外部进程运行。第一个充其量只是略微比new File().delete()
快。第二个是显着慢。
我会说new File().delete()
的90%以上的费用是在系统调用和操作系统的文件系统层中。