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.
You need to use
renameTo()
method of File Class.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.
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.
Instead of using a raw
File
constructor, use the methodgetFileStreamPath
provided by theContext
. That is to say, do: