2010-05-24 5 views
11

Dans mon application Android, je souhaite renommer le nom de fichier lors de l'exécution. Comment puis-je le faire?Comment renommer un fichier sur une carte SD avec une application Android?

Ceci est mon 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(); 
} 

J'ai aussi utilisé la méthode renameTo (fichier f) mais il ne fonctionne pas.

+0

Visiter [celui-ci] [1] [1]: http://stackoverflow.com/questions/9065514/move-rename- file-in-sd-card –

+1

Vous devez accepter les réponses si vous voulez que les gens vous aident, FYI – Gattsu

Répondre

81

Je recommanderais d'utiliser File.renameTo() plutôt que d'exécuter la commande mv, depuis que je suis assez sûr que celui-ci est pris en charge .. ne

Avez-vous donné votre application permission to write to the SD Card?

Pour ce faire, adding the following to your AndroidManifest.xml:

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

Si cela ne fonctionne pas une fois l'autorisation est ajouté vérifier le journal de l'appareil pour les erreurs lorsque vous essayez de renommer le fichier (soit en utilisant la commande adb ou dans le logcat voir dans Eclipse). Lorsque vous accédez à la carte SD, vous ne devez pas coder en dur le chemin mais utiliser la méthode the Environment.getExternalStorageDirectory() pour obtenir le répertoire.

Le code suivant fonctionne pour moi:

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

et si vous voulez vérifier le processus, vous pouvez faire comme:

boolean renamed = from.renameTo(to); 

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

Maintenant j'essaye Fichier f1 = nouveau Fichier ("/ sdcard/sun moon.jpg"); Fichier f2 = nouveau fichier ("/ sdcard/soon_moon.jpg"); \t try { \t f1.renameTo (f2); \t} catch (Exception e) { \t \t Toast.makeText (this, "" + e, Toast.LENGTH_LONG) .show(); \t \t} et utiliser la permission dans le fichier AndroidManifest.xml mais encore, il n'y a pas de changement. – Addy

+0

Il n'y a pas d'erreurs dans logcaat – Addy

+0

J'ai mis à jour ma réponse avec du code qui fonctionne pour moi.Est-ce que 'renameTo()' retourne 'true' ou' false' quand vous l'exécutez? Si elle renvoie 'false', que retourne f1.exists()'? –

5

vous pouvez aussi donner explicitement le chemin complet sans spécifier le répertoire ...

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

J'ai essayé d'ajouter des permissions. Même si cela n'a pas fonctionné, l'ajout de File1.setWritable(true); m'a permis de renommer le fichier.

Ci-dessous mon extrait de code:

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"); 
Questions connexes