Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/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,我想知道是否有可能创建多个名称相似的文件,而不覆盖当前文件 例如: 如果我有一个文件:xyz.txt 下次我创建它时应该是:xyz(1).txt 因此,如果我重新运行这个程序,我的当前文件不应该被覆盖。我已经尝试使用带有标志变量的if条件将数字作为前缀添加到文件名中 我想知道是否有任何Java命令可以避免覆盖现有文件 我想知道是否有任何本机java命令可以停止覆盖[并在文件名中添加一个数字] 不在核心Java库中,不在。请看一下该方法 要创建新文件,可以首先调整前缀和后缀以适应基础平台的限制。如

我想知道是否有可能创建多个名称相似的文件,而不覆盖当前文件

例如: 如果我有一个文件:xyz.txt 下次我创建它时应该是:xyz(1).txt

因此,如果我重新运行这个程序,我的当前文件不应该被覆盖。我已经尝试使用带有标志变量的if条件将数字作为前缀添加到文件名中

我想知道是否有任何Java命令可以避免覆盖现有文件

我想知道是否有任何本机java命令可以停止覆盖[并在文件名中添加一个数字]


不在核心Java库中,不在。请看一下该方法

要创建新文件,可以首先调整前缀和后缀以适应基础平台的限制。如果前缀太长,它将被截断,但它的前三个字符将始终保留。如果后缀太长,那么它也将被截断,但是如果它以句点字符('.')开头,那么句点和它后面的前三个字符将始终被保留。一旦进行了这些调整,将通过连接前缀、五个或更多内部生成的字符和后缀来生成新文件的名称


@Greg Kopff
所示,不在java中。 但你可以解决这样的问题:

  int count = 0;

  public void createFile(String name) throws IOException
  {
    File f;
    f = new File(name);
    if (!f.exists())
    {
      f.createNewFile();
    }
    else
    {
      count++;
      createFile(name + (count));
    }
  }

虽然类似于位图的响应,但我还是提出了这个java代码(看起来很有效)。我不知道这是否是最有效的,但是

例如,我假设该文件将是一个.txt文件

String fileName = "output.txt"; 
File aFile = new File(fileName);

int fileNo = 0;
while(aFile.exists() && !aFile.isDirectory()) { 
    fileNo++; 
    String newName = fileName.replaceAll(".txt", "(" + fileNo + ").txt");   
    aFile = new File(newName);
} 

哈哈,我想我会用同样的方法:)我已经这样做了。在我的帖子中已经提到了它,但感谢您的回复:)如果是这样,那么您的思路是正确的-您需要告诉java不要替换现有文件-否则java将默认截断该文件为空,并用提交给它的当前值替换它。此解决方案不是线程安全的,我们应该使用createNewFile()的返回标志,而不是createNewFile()将以原子方式创建文件,如果文件已存在,则返回false。@Greg Kopff-有一个重载方法,它将目录作为参数之一,允许您在指定目录中创建文件,而不是默认为temp always。+1:这是最合适的方法。如果您将目录传递给方法,它将存储在您告诉它的位置。只要不使用
deleteOnExit()
方法,文件就不会被删除。另外,您还编写了
createTimeFile()
而不是
createTempFile()
:)@Deco-感谢您捕捉到输入错误
String fileName = "output.txt"; 
File aFile = new File(fileName);

int fileNo = 0;
while(aFile.exists() && !aFile.isDirectory()) { 
    fileNo++; 
    String newName = fileName.replaceAll(".txt", "(" + fileNo + ").txt");   
    aFile = new File(newName);
}