Как переименовать файл на SD-карте с помощью приложения Android?

В моем приложении для 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), но он не работает.

Ответ 1

Я бы рекомендовал использовать 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...");
}

Ответ 2

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

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

Ответ 3

Я попробовал добавить разрешения. Несмотря на то, что это не сработало, добавление 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");