web-dev-qa-db-fra.com

Comment renommer un fichier sur sdcard avec une application Android?

Dans mon application Android, je souhaite renommer le nom du fichier au moment de l'exécution. Comment puis-je le faire?

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 également utilisé la méthode renameTo (fichier f) mais cela ne fonctionne pas.

12
Addy

Je recommanderais d'utiliser File.renameTo() plutôt que d'exécuter la commande mv, car je suis à peu près sûr que cette dernière n'est pas prise en charge.

Avez-vous donné votre autorisation de l'application pour écrire sur la carte SD ?

Vous faites cela par en ajoutant ce qui suit à votre AndroidManifest.xml :

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

Si cela ne fonctionne pas une fois l'autorisation ajoutée, recherchez des erreurs dans le journal du périphérique lorsque vous essayez de renommer le fichier (à l'aide de la commande adb ou de la vue logcat dans Eclipse).

Lors de l’accès à la carte SD, vous ne devez pas coder en dur le chemin, mais utiliser la méthode la 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...");
}
84
Dave Webb

vous pouvez aussi explicitement donner le chemin complet sans spécifier de 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);
5
Xar E Ahmer

J'ai essayé d'ajouter des autorisations. 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");
0
ashish bulchandani
public void selectFile() {
    AlertDialog.Builder pictureDialog = new AlertDialog.Builder(this);
    pictureDialog.setTitle("Select Action");
    String[] pictureDialogItems = {
            "Select file from internal storage"};
    pictureDialog.setItems(pictureDialogItems,
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    switch (which) {
                        case 0:
                            choosePhotoFromGallary();
                            break;
                    }
                }
            });
    pictureDialog.show();
}
public void choosePhotoFromGallary() {
    Intent galleryIntent = new Intent(Intent.ACTION_PICK,
            Android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

    startActivityForResult(galleryIntent, GALLERY);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == this.RESULT_CANCELED) {
        return;
    }
    if (requestCode == GALLERY) {
        if (data != null) {
            Uri contentURI = data.getData();
            File dir = Environment.getExternalStorageDirectory();
            if(dir.exists()){
                File from = new File(dir, String.valueOf(GALLERY));
                File to = new File(dir,"filerename.txt");
                if(from.exists())
                    from.renameTo(to);
            }
        }
    }
}
0
Tayyab Hayat