it-swarm.com.de

Wie benenne ich eine Datei auf SD-Karte mit Android-Anwendung?

In meiner Android-Anwendung möchte ich den Dateinamen zur Laufzeit umbenennen. Wie kann ich es tun?

Das 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 habe auch die Methode renameTo (File f) verwendet, aber sie funktioniert nicht.

12
Addy

Ich würde empfehlen, File.renameTo() zu verwenden, anstatt den Befehl mv auszuführen, da ich ziemlich sicher bin, dass Letzterer nicht unterstützt wird.

Haben Sie Ihrer Anwendung die Erlaubnis erteilt, auf die SD-Karte zu schreiben ?

Sie tun dies, indem Sie Folgendes zu Ihrem AndroidManifest.xml hinzufügen :

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

Wenn dies nach dem Hinzufügen der Berechtigung nicht funktioniert, überprüfen Sie das Geräteprotokoll auf Fehler, wenn Sie versuchen, die Datei umzubenennen (entweder mit dem Befehl adb oder in der Ansicht logcat in Eclipse).

Wenn Sie auf die SD-Karte zugreifen, sollten Sie den Pfad nicht fest codieren, sondern stattdessen die Environment.getExternalStorageDirectory() -Methode 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 wie folgt vorgehen:

boolean renamed = from.renameTo(to);

if (renamed) {
  Log.d("LOG","File renamed...");
}else {
  Log.d("LOG","File not renamed...");
}
84
Dave Webb

sie können den vollständigen Pfad auch explizit angeben, ohne das Verzeichnis anzugeben ...

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

Ich habe versucht, Berechtigungen hinzuzufügen. Obwohl dies nicht funktioniert hat, konnte ich die Datei durch Hinzufügen von File1.setWritable(true); umbenennen.

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