是否有可能在Java中没有新文件实例的删除文件?

时间:2011-12-12 09:25:41

标签: java

我有一个用于文件删除的简单函数,

它会检查文件大小,

如果小于特定值,则删除文件

然而,这个函数将被称为千次

每次都是新文件实例,

我认为文件对象创建问题会很昂贵,

还有其他方法可以解决这个问题吗?

public void checkFile(String filePath) {
    File file = new File(filePath); //this is expensive
    if (file.length() < 500) {
         file.delete();
    }
}

5 个答案:

答案 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对象的文件。不纯的替代品是:

  • 使用JNI或JNA调用将调用unlink或Window等效的本机代码,
  • rmdel命令作为外部进程运行。

第一个充其量只是略微new File().delete()快。第二个是显着慢。

我会说new File().delete()的90%以上的费用是在系统调用和操作系统的文件系统层中。