2010-05-24 7 views
11

In meiner Android-Anwendung möchte ich den Dateinamen zur Laufzeit umbenennen. Wie kann ich es tun?Wie man eine Akte auf sdcard mit Android-Anwendung umbenennt?

Dies ist mein Code:

String[] command = {" mv", "sun moon.jpg"," sun_moon,jpg"}; 
try 
{ 
    Process process = Runtime.getRuntime().exec(command); 
} 
catch (IOException e) 
{ 
    Toast.makeText(this, ""+e, Toast.LENGTH_LONG).show(); 
} 

ich auch renameTo (File f) Verfahren verwendet, aber es funktioniert nicht.

+0

Besuch [dieses] [1] [1]: http://stackoverflow.com/questions/9065514/move-rename- Datei-in-SD-Karte –

+1

Sie müssen Antworten akzeptieren, wenn Sie möchten, dass die Leute Ihnen helfen, FYI – Gattsu

Antwort

81

Ich empfehle File.renameTo() mit lieber als das Laufen des mv Befehl, da ich ziemlich sicher bin, diese nicht unterstützt wird ..

Haben Sie Ihre application permission to write to the SD Card gegeben?

Sie tun dies, indem adding the following to your AndroidManifest.xml:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

Wenn es nicht funktioniert, wenn die Erlaubnis gegeben wird das Gerät Protokoll auf Fehler überprüfen, wenn Sie versuchen, die Datei zu umbenennen (entweder mit dem adb Befehl oder in der logcat Ansicht in Eclipse).

Beim Zugriff auf die SD-Karte sollten Sie den Pfad nicht fest codieren, sondern stattdessen die Methode the Environment.getExternalStorageDirectory() verwenden, um das Verzeichnis abzurufen.

Der folgende Code funktioniert für mich:

File sdcard = Environment.getExternalStorageDirectory(); 
File from = new File(sdcard,"from.txt"); 
File to = new File(sdcard,"to.txt"); 
from.renameTo(to); 

und wenn Sie den Prozess überprüfen möchten, können Sie tun:

boolean renamed = from.renameTo(to); 

if (renamed) { 
    Log.d("LOG","File renamed..."); 
}else { 
    Log.d("LOG","File not renamed..."); 
} 
+0

Jetzt versuche ich Datei f1 = neue Datei ("/ sdcard/sun moon.jpg"); Datei f2 = neue Datei ("/ sdcard/soon_moon.jpg"); \t versuchen { \t f1.renameTo (f2); \t} catch (Ausnahme e) { \t \t Toast.makeText (dies, "" + e, Toast.LENGTH_LONG) .show(); \t \t} und verwendet, um die Erlaubnis in AndroidManifest.xml Datei aber immer noch gibt es keine Änderungen. – Addy

+0

Es gibt keine Fehler in Logcaat – Addy

+0

Ich habe meine Antwort mit Code aktualisiert, der für mich funktioniert.Gibt 'renameTo() '' '' '' '' 'zurück, wenn Sie es ausführen? Wenn es 'false 'zurückgibt, was gibt' f1.exists() 'zurück? –

5

Sie auch explizit den vollständigen Pfad ohne Verzeichnis Angabe geben kann ...

File file = new File("Path of file which you want to rename"); 
File file2 = new File("new name for the file"); 
    boolean success = file.renameTo(file2); 
0

Ich habe versucht, Berechtigungen hinzuzufügen. Obwohl es nicht funktionierte, ermöglichte das Hinzufügen von File1.setWritable(true); mir, die Datei umzubenennen.

Unten ist mein Code-Schnipsel:

if(from.setWritable(true)) 
    Log.d("InsertFragmentTwo ", "FileName==> Is Writable"); 
File two = new File(sdcard,""+imageCount+"."+s.substring((s.lastIndexOf(".")+1))); 
if (from.renameTo(two)) { 
    Log.d("InsertFragmentTwo ", "New FileName==> " + temp); 
    imageCount++; 
    retrofitImageUpload(temp); 
} else 
    Log.d("InsertFragmentTwo ", "File Renaming Failed");