在Java中,是否可以在没有新文件实例的情况下删除文件?
我有一个用于文件删除的简单函数 它将检查文件大小 如果小于特定值,请删除该文件 但是,此函数将被调用上千次 每次它将创建一个新的文件实例 我认为在文件对象创建问题上会很昂贵 是否有其他方法解决此问题在Java中,是否可以在没有新文件实例的情况下删除文件?,java,Java,我有一个用于文件删除的简单函数 它将检查文件大小 如果小于特定值,请删除该文件 但是,此函数将被调用上千次 每次它将创建一个新的文件实例 我认为在文件对象创建问题上会很昂贵 是否有其他方法解决此问题 public void checkFile(String filePath) { File file = new File(filePath); //this is expensive if (file.length() < 500) { file.delet
public void checkFile(String filePath) {
File file = new File(filePath); //this is expensive
if (file.length() < 500) {
file.delete();
}
}
公共无效检查文件(字符串文件路径){
File File=新文件(filePath);//这很昂贵
if(file.length()<500){
delete();
}
}
我认为“思考”不够好;您是否确实发现文件
对象创建是应用程序中的一个瓶颈?无论如何,我不认为您可以在不创建文件对象的情况下删除文件,除非您计划编写自己的“本机”方法,通过将文件路径作为字符串来取消文件链接。与检查磁盘上的文件大小相比,对新文件()性能的影响微乎其微。别担心
如果您真的认为它会有所不同,请测量它,然后对其进行优化。标准java API不允许这样做。对现代计算机来说,数千次几乎是零。创建java.io.File
实例所花费的时间比删除要少,所以不用担心。如果您发现此代码有任何问题,可以将缓存创建为映射
,并从中获取文件实例
但是,不要这样做,除非你看到这是你的问题。没有预先成熟的优化 为什么代码会很昂贵?由于分代GC,在Java中创建临时对象不再昂贵。文件只是一个封装文件系统路径的对象。创建一个文件并不昂贵。在纯Java中删除一个文件不需要创建文件
对象是不可能的。不纯的替代品是:
- 使用JNI或JNA调用将调用
unlink
或等效窗口的本机代码
- 作为外部进程运行
rm
或del
命令
第一个最多只比newfile().delete()
稍微快一点。第二个要慢得多
我想说,newfile().delete()
的90%以上的成本都在系统调用和操作系统的文件系统层中。在Java中创建对象和提高性能时不要犹豫。Java就是为此而生的,他们在过去的16年中努力使它变得更好…+1:创建一个新的文件对象需要100纳秒,删除一个文件在硬盘上需要大约10毫秒。i、 e.大约慢100000倍