2012-01-13 9 views
5

私のオーディオレコーダーのファイルを作成しようとしていますが、このファイルにはランダムな名前が付けられています。これは動作するのが難しいので、ファイルを作成した後、ファイルをより意味のある名前に変更します。File.renameTo()はtrueを返しますが、ファイルの名前が変更されていません

renameToがtrueを返しても、ファイルの名前が変更されていません。

ここで何か問題がありますか?

outfile = File.createTempFile(amount + "_alarmsave", ".3gp", 
        storageDir); 

      System.out.println("Old file: "+outfile.getAbsolutePath()); 

      File newFile = new File(outfile.getParent(), "alarmsave_" + amount + ".3gp"); 

      System.out.println("new file: "+newFile.getAbsolutePath()); 

      if(outfile.renameTo(newFile)){ 
       System.out.println("Succes! Name changed to: " + outfile.getName()); 
      }else{ 
       System.out.println("failed"); 
      } 

LogCat出力:

01-13 18:27:40.264: I/System.out(22913): Old file: /mnt/sdcard/Personal Alarm/13_alarmsave1623959934.3gp 
01-13 18:27:40.264: I/System.out(22913): new file: /mnt/sdcard/Personal Alarm/alarmsave_13.3gp 
01-13 18:27:40.284: I/System.out(22913): Succes! Name changed to: 13_alarmsave1623959934.3gp 

答えて

13

RenameToは、実際のファイルの名前を変更し、それがFileオブジェクトを変更しません。 .exists()を呼び出した場合、新しいファイルが存在し、古いファイルは存在しないことがわかります。

Fileクラスがファイルシステム上の実際のファイルではなく、抽象パスを表すためです。考えられるのは、File.renameToは、指定されたパスのファイルシステムエントリに新しい名前を付けることです。パス自体は変更されません。

+0

これは...うーん。思考の糧。 オブジェクト自体の名前自体は変わりません。あなたはそうだったけど、その名前はファイルシステム自体に変わった。だから、ありがとう! –

+0

実際のファイルの名前を変更するにはどうすればよいですか。私は新しいファイルパスを印刷するのと同じ動作をしますが、新しいパスを取得しますが、ファイルの名前は変更されませんでしたか?何か案は ? –

+0

'renameTo'は、実際のファイルの名前を変更します。 Fileオブジェクトの名前は変更されません。 – Joni

関連する問題