Rename a file in the internal storage

user1341676 picture user1341676 · Aug 29, 2012 · Viewed 11.5k times · Source

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.

Answer

JulianSymes picture JulianSymes · Nov 26, 2012

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);