【问题标题】:Android RenameTo leaves empty fileAndroid RenameTo 留下空文件
【发布时间】:2015-02-13 20:40:46
【问题描述】:

你能帮帮我吗? renameTo() 留下空的旧文件。所以我在文件系统中看到了 2 个具有新名称和旧名称的文件。旧文件的大小为0。如果我在重命名后删除旧文件,则表示该文件在文件系统中不存在。

目录的绝对路径是:

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

【问题讨论】:

  • 你想做什么?
  • 我想让用户更改文件名
  • 什么是newname?使用调试器单步执行。
  • 像 abc.mp4 这样的名字
  • 它已被删除,我想您需要向操作系统发送广播以扫描新文件并自动进行所有更改。

标签: android android-file


【解决方案1】:

试试这个代码:

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

您可以使用以下代码以编程方式获取String 类型中的 sdcard 目录:

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

不要忘记在清单中添加此权限:

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

【讨论】:

  • 这并不能解决存储中旧文件的空版本问题
  • 这是正确的方法,你不应该忘记文件扩展
【解决方案2】:

如果文件被另一个进程打开,RenameTo 会留下原始文件的空副本。

例如,我想在 DownloadManager 完成下载后重命名文件。 DownloadManager 显然会在下载后但在关闭文件之前通知 BroadcastReceivers。这导致 onReceive 中的 renameTo 留下一个空副本。为了解决这个问题,我不得不让 BroadcastReceiver 在重命名文件之前等待半秒。

【讨论】:

  • 我也遇到过,5s后我确实删除了文件。它也有效。但这个解决方案可能更好。
【解决方案3】:

您必须记住两件事:文件和文件扩展名(文件类型)。在删除和重命名文件的情况下,有时以下方法是错误的:

File file = new File (dir+"/"+myfile) 

正确的做法是:

File file = new File (dir, myfile+".db"); 

对于完整的 Aprroach,您可以查看 Answer Here

【讨论】:

    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 2011-10-24
    • 1970-01-01
    • 2012-06-24
    相关资源
    最近更新 更多