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

时间:2013-01-10 09:36:07

标签: java design-patterns filenames

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

如果我在目标文件夹中存在文件myfile.txt且同一时间myfile.txt,那就好了 - 我需要复制名为myfile_1.txt的文件

同时,如果我有一个文件myfile.txt,但destintation文件夹包含myfile.txtmyfile_1.txt - 生成的文件名必须为myfile_2.txt

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

这样做的最佳方法是什么?

4 个答案:

答案 0 :(得分:3)

使用commons-io

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
}

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

答案 1 :(得分:0)

您也可以从使用apache commons-io库中受益。它在FileUtils和FilenameUtils类中有一些有用的文件操作方法。

答案 2 :(得分:-1)

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

https://stackoverflow.com/a/805504/1961652

    DirectoryScanner scanner = new DirectoryScanner();
    scanner.setIncludes(new String[]{"**/myfile*.txt"});
    scanner.setBasedir("C:/Temp");
    scanner.setCaseSensitive(false);
    scanner.scan();
    String[] files = scanner.getIncludedFiles();

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

答案 3 :(得分:-1)

未经测试的代码:

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++;    
}