Как переименовать файл на 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");