Rename a file in the internal storage

2019-06-16 19:17发布

What's the best/easiest way to rename a file in the application's internal storage? I find it a bit strange that there is a Context.deleteFile() method, but no "move" or "rename" function. Do I have to go all the way through saving the file's contents, deleting it, creating a new one and then copying the contents into that one? Or is there a way to copy a file over an existing file?

Update (Aug. 30, 2012):

As per the suggested solution below, which I cannot get to work:

  • I have a file called shoppinglists.csv
  • Then I create a new file called shoppinglists.tmp, and copy the contents from shoppinglists.csv AND some new entries into that. The shoppinglist.tmp file is then a new version of the shoppinglists.csv file
  • Then I delete the old shoppinglists.csv file
  • Then I need to rename the shoppinglists.tmp file to shoppinglists.csv

I tried this:

ctx.deleteFile("shoppinglists.csv");           <--- delete the old file
File oldfile = new File("shoppinglists.tmp");
File newfile = new File("shoppinglists.csv");
oldfile.renameTo(newfile);

However, this doesn't work. After deleteFile(), nothing more happens, and I'm left with the new shoppinglists.tmp file.

What am I missing?

NB: There are no errors or anything in LogCat.

5条回答
可以哭但决不认输i
2楼-- · 2019-06-16 19:44

You need to use renameTo() method of File Class.

File testFile = new File ( "test.txt" ); // Assuming it is in Internal Storage
testFile.renameTo ( "newTest.txt" ); 
查看更多
可以哭但决不认输i
3楼-- · 2019-06-16 19:57

I think we cannot use File.renameTo() method in Internal Storage environment. Renaming a file in this environment, can do: - Copy content of the old file to new file. - Delete old file.

查看更多
冷血范
4楼-- · 2019-06-16 19:58

renameTO() doesn't work in my environment (Eclipse Indigo, AVD with android version 2.3). The solution is to skip the temporary file method alltogeher, since it doesn't seem to be possible to solve in any reasonable time frame.

查看更多
爷的心禁止访问
5楼-- · 2019-06-16 19:59
File file = new File("your old file/folder name");
File file2 = new File("your new file/folder name");
boolean success = file.renameTo(file2);
查看更多
虎瘦雄心在
6楼-- · 2019-06-16 20:07

Instead of using a raw File constructor, use the method getFileStreamPath provided by the Context. That is to say, do:

File oldfile = ctx.getFileStreamPath("shoppinglists.tmp");
File newfile = ctx.getFileStreamPath("shoppinglists.csv");
oldfile.renameTo(newfile);
查看更多
登录 后发表回答