Как переименовать файл на SDCard с помощью приложения Android? - PullRequest
13 голосов
/ 24 мая 2010

В моем приложении для Android я хочу переименовать имя файла во время выполнения.Как я могу это сделать?

Это мой код:

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

Я также использовал метод renameTo (File f), но он не работает.

Ответы [ 4 ]

85 голосов
/ 24 мая 2010

Я бы порекомендовал использовать File.renameTo() вместо выполнения команды mv, так как я уверен, что последняя не поддерживается ..

Дали ли вы приложению разрешение на запись на SD-карту ?

Вы делаете это с помощью , добавляя следующее к вашему AndroidManifest.xml:

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

Если оно не работает после добавления разрешения, проверьте журнал устройства на наличие ошибок при попытке переименовать файл (либо с помощью команды adb, либо в представлении logcat в Eclipse).

При доступе к SD-карте вы не должны жестко кодировать путь, а вместо этого использовать метод Environment.getExternalStorageDirectory() для получения каталога.

У меня работает следующий код:

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

и если вы хотите проверить процесс, вы можете сделать так:

boolean renamed = from.renameTo(to);

if (renamed) {
  Log.d("LOG","File renamed...");
}else {
  Log.d("LOG","File not renamed...");
}
5 голосов
/ 15 мая 2014

Вы также можете явно указать полный путь без указания каталога ...

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 голосов
/ 04 января 2019
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 голосов
/ 13 декабря 2014

Я попытался добавить разрешения. Хотя это не сработало, добавление File1.setWritable(true); позволило мне переименовать файл.

Ниже приведен фрагмент кода:

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