2015-02-13 5 views
1

Не могли бы вы помочь мне. renameTo() оставляет пустой старый файл. Поэтому я вижу 2 файла в файловой системе с новым именем и старым именем. Размер старого файла: 0. Если я удалю старый файл после переименования, он говорит, что файл не существует, оставаясь в файловой системе.Android RenameTo оставляет пустой файл

Абсолютный путь директории:

/storage/sdcard0/DCIM/Camera 

Мой код:

 String dir = oldpath.substring(0, oldpath.lastIndexOf("/")); 

     File directory = new File(dir); 
     File from  = new File(directory, oldfilename); 
     File to  = new File(directory, newname); 

     renamed = from.renameTo(to); 
+0

Что вы пытаетесь сделать? –

+0

Я хочу, чтобы пользователь мог изменить имя файла – user3082303

+0

Что такое 'newname'? Пройдите через отладчик. – Simon

ответ

0

Попробуйте этот код:

File sdcard = new File("/storage/sdcard0/DCIM/Camera"); 
File from = new File(sdcard, "from.txt"); // Don't forget to set the file extension. 
File to = new File(sdcard, "to.txt"); // In this case, we have a '.txt' file extension. 
from.renameTo(to); 

Вы можете получить каталог SDCard в String типа программно используя этот код:

String sdcard = Environment.getExternalStorageDirectory().getPath(); 

Не забудьте добавить это разрешение в манифесте:

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

Это не решает проблему пустой версии старого файла, оставшегося в хранилище –

1

RenameTo оставляет пустую копию исходного файла, если файл открыт другим процессом.

Например, я хотел переименовать файл после того, как DownloadManager завершил его загрузку. DownloadManager, по-видимому, уведомляет BroadcastReceivers после загрузки, но перед закрытием файла. Это заставило renameTo в onReceive оставить пустую копию. Чтобы решить эту проблему, мне пришлось заставить BroadcastReceiver ждать полсекунды, прежде чем переименовывать файл.

+0

Я тоже это встретил, и я удалил файл после 5 секунд. Это также работает. Но это решение может быть лучше. –

Смежные вопросы