2012-08-29 5 views
8

Was ist die beste/einfachste Möglichkeit, eine Datei im internen Speicher der Anwendung umzubenennen? Ich finde es ein bisschen komisch, dass es eine Context.deleteFile() Methode gibt, aber keine "move" oder "rename" Funktion. Muss ich den gesamten Inhalt der Datei speichern, löschen, neu erstellen und dann den Inhalt kopieren? Oder gibt es eine Möglichkeit, eine Datei über eine vorhandene Datei zu kopieren?Umbenennen einer Datei im internen Speicher

Update (30. August 2012):

Gemäß der vorgeschlagenen Lösung unten, die ich nicht zur Arbeit bekommen:

  • Ich habe eine Datei mit dem Namen shoppinglists.csv
  • Dann habe ich Erstelle eine neue Datei namens shoppinglists.tmp und kopiere den Inhalt von shoppinglists.csv UND einige neue Einträge in diesen. Die shoppinglist.tmp Datei ist dann eine neue Version der Datei shoppinglists.csv
  • Dann lösche ich die alte shoppinglists.csv Datei
  • Dann muss ich die shoppinglists.tmp Datei umbenennen
shoppinglists.csv

ich versuchte dies:

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

dies ist jedoch nicht funktioniert. Nach deleteFile() passiert nichts mehr, und mir bleibt die neue shoppinglists.tmp-Datei.

Was fehlt mir?

Hinweis: Es gibt keine Fehler oder irgendetwas in LogCat.

+0

prüfen diese Lösung http://stackoverflow.com/questions/2896733/how-to-rename-filename-in-sdcard-with-android-application –

Antwort

0

renameTO() funktioniert nicht in meiner Umgebung (Eclipse Indigo, AVD mit Android-Version 2.3). Die Lösung besteht darin, die temporäre Dateimethode alltoger zu überspringen, da es nicht möglich ist, sie in einem vernünftigen Zeitrahmen zu lösen.

0

Sie müssen renameTo() Methode der Dateiklasse verwenden.

+0

ich nicht, dass die Arbeit bekommen - Bitte beachten Sie die aktualisierte Problembeschreibung (Frage). –

+0

Niemand hat irgendwelche Ideen? Ich denke über Berechtigungen Probleme, aber das ist ein bisschen seltsam, da die Anwendung in der Lage ist, sowohl neue Dateien zu löschen und zu erstellen, als auch Daten zu ihnen hinzuzufügen. Wenn ich keine Lösung finden kann, muss ich die temporäre Datei überspringen und einfach ein Array [] [] als temporären Speicher verwenden, die ursprüngliche Datei löschen, eine neue erstellen und das Array [] [] Inhalt in das. –

+0

Nein, ich denke nicht, dass es ein Erlaubnisproblem ist, ich muss vielleicht die remaneTo() Methode programmieren und persönlich überprüfen. – Lucifer

5

Verwenden Sie anstelle eines rohen File-Konstruktors die Methode getFileStreamPath, die von Context bereitgestellt wird. Das heißt, do:

File oldfile = ctx.getFileStreamPath("shoppinglists.tmp"); 
File newfile = ctx.getFileStreamPath("shoppinglists.csv"); 
oldfile.renameTo(newfile); 
+0

Das Problem ist vermutlich, dass 'neue Datei (" fred ")' bezieht sich auf einen Namen relativ zum aktuellen Verzeichnis des Programms, das ist wahrscheinlich nicht, und garantiert nicht zu sein, das Verzeichnis, in dem interne Dateien gespeichert sind. – JulianSymes

0

Ich denke, wir können File.renameTo() -Methode nicht in der internen Speicherumgebung verwenden. Umbenennen einer Datei in dieser Umgebung, kann: - Kopieren Sie den Inhalt der alten Datei in eine neue Datei. - Lösche alte Datei.

0
File file = new File("your old file/folder name"); 
File file2 = new File("your new file/folder name"); 
boolean success = file.renameTo(file2);