Java 为现有文件(file.txt=>;file_1.txt)的文件名添加索引

Java 为现有文件(file.txt=>;file_1.txt)的文件名添加索引,java,design-patterns,filenames,Java,Design Patterns,Filenames,如果文件已经存在,我想给文件名添加一个索引,这样我就不会覆盖它 例如,如果我有一个文件myfile.txt,同时目标文件夹中存在myfile.txt,我需要复制名为myfile_1.txt 同时,如果我有一个文件myfile.txt,但目标文件夹包含myfile.txt和myfile\u 1.txt,则生成的文件名必须是myfile\u 2.txt 因此,该功能与在Microsoft操作系统中创建文件夹非常相似 最好的方法是什么?尝试此链接,部分回答您的问题 获得正确的文件集后,请添加适当的后

如果文件已经存在,我想给文件名添加一个索引,这样我就不会覆盖它

例如,如果我有一个文件
myfile.txt
,同时目标文件夹中存在
myfile.txt
,我需要复制名为
myfile_1.txt

同时,如果我有一个文件
myfile.txt
,但目标文件夹包含
myfile.txt
myfile\u 1.txt
,则生成的文件名必须是
myfile\u 2.txt

因此,该功能与在Microsoft操作系统中创建文件夹非常相似


最好的方法是什么?

尝试此链接,部分回答您的问题


获得正确的文件集后,请添加适当的后缀以创建新文件。

使用apache commons io库也可能会使您受益匪浅。在类FileUtils和FilenameUtils中有一些有用的文件操作方法。

未测试的代码:

File f = new File(filename);
String extension = "";
int g = 0;
int i = f.lastIndexOf('.');
extension = fileName.substring(i+1);

while(f.exists()) {      
  if (i > 0) 
  {  f.renameTo(f.getPath() + "\" + (f.getName() + g) + "." + extension); }
  else
  {  f.renameTo(f.getPath() + "\" + (f.getName() + g)); }     

  g++;    
}
使用:


这将检查例如
file.txt
是否存在,并返回
file-1.txt

最好的方法是编写这样做的代码。。。然后,如果有些事情没有如预期的那样起作用,发布一个问题。。。顺便问一下,有多少文件需要检查?(我的意思是在数百万或几十之间?)看看。UI可以创建循环,检查每个索引是否存在,或者简单地列出与文件名匹配的文件,对其进行排序并获取最后一个索引(或简单地计数)。文件名不一定包含扩展名。MyFile是一个非常合理的文件名。对不起,这是一个非常坏的文件名。正如@dendini已经说过的,没有扩展名的文件是完全合理的,而且你会陷入循环中,因为g永远不会增加,因此f永远存在。重命名重命名文件,而不仅仅是更改字符串。
File f = new File(filename);
String extension = "";
int g = 0;
int i = f.lastIndexOf('.');
extension = fileName.substring(i+1);

while(f.exists()) {      
  if (i > 0) 
  {  f.renameTo(f.getPath() + "\" + (f.getName() + g) + "." + extension); }
  else
  {  f.renameTo(f.getPath() + "\" + (f.getName() + g)); }     

  g++;    
}
private static File getUniqueFilename( File file )
{
    String baseName = FilenameUtils.getBaseName( file.getName() );
    String extension = FilenameUtils.getExtension( file.getName() );
    int counter = 1
    while(file.exists())
    {
        file = new File( file.getParent(), baseName + "-" + (counter++) + "." + extension );
    }
    return file
}