Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,是否可以在没有新文件实例的情况下删除文件?_Java - Fatal编程技术网

在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倍