2

ファイルが既に存在する場合は、ファイル名にインデックスを追加して、上書きしないようにします。

ファイルがmyfile.txtあり、同じ時間myfile.txtが宛先フォルダーに存在する場合のように-名前を付けてファイルをコピーする必要がありますmyfile_1.txt

同時に、ファイルmyfile.txtがあるが、宛先フォルダに含まれmyfile.txtている場合myfile_1.txt-生成されたファイル名はmyfile_2.txt

そのため、機能はMicrosoftオペレーティングシステムでのフォルダの作成と非常によく似ています。

それを行うための最良のアプローチは何ですか?

4

4 に答える 4

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

于 2015-11-03T12:55:07.327 に答える
0

また、apachecommons-ioライブラリを使用することでメリットが得られる場合があります。FileUtilsクラスとFilenameUtilsクラスにいくつかの便利なファイル操作メソッドがあります。

于 2013-01-10T09:48:22.787 に答える
-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();

正しいファイルのセットを取得したら、適切なサフィックスを追加して新しいファイルを作成します。

于 2013-01-10T09:47:16.963 に答える
-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++;    
}
于 2013-01-10T09:51:50.527 に答える