Android RenameTo leaves empty file

牧云@^-^@ 提交于 2019-12-24 13:34:01

问题


Could you please help me. renameTo() leaves empty old file. So I see 2 files in file system with new name and old name. The size of old file is 0. If I delete old file after renaming it says that file does not exist while staying in file system.

An absolute path of directory is:

/storage/sdcard0/DCIM/Camera

My code:

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

回答1:


RenameTo leaves an empty copy of the original file if the file is opened by another process.

For example, I wanted to rename a file after the DownloadManager finished downloading it. The DownloadManager apparently notifies the BroadcastReceivers after the download, but before closing the file. This caused the renameTo in the onReceive to leave an empty copy. To solve this problem, I had to make the BroadcastReceiver to wait half a second before renaming the file.




回答2:


Try this code:

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

You can get the sdcard directory in String type programmatically by using this code:

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

Don't forget to add this permission in manifest:

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


来源:https://stackoverflow.com/questions/28508387/android-renameto-leaves-empty-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!