Android File.rename在我的测试索尼设备中总是返回false



我正在尝试重命名一个文件以添加其扩展名。我正在检测文件的类型,并希望将扩展名附加到文件中。一切都很好,但我有一台索尼Xperia Z2要测试,结果发生了一些奇怪的事情。在其他设备和模拟器中,工作起来很有魅力,但在这个。。。这是不可能的。

它总是返回false,尽管它在父文件夹中具有写入权限,但它是同一个文件夹,并且只附加了".jpg"或".png"之类的内容。由于File.renameTo函数不会给出任何错误,只是抛出false,我不能确定是否只有我……但我开始相信这是关于它如何管理内部/外部存储的问题。内部存储器实际上是sdcard0,外部存储器是sdcard1。一些应用程序,如ES File Manager,会询问我的SD卡的根在哪里,这样它就可以重命名、移动或复制我的SD卡中的文件。Airdroid让我做同样的事情。为什么会发生这种情况?我该怎么解决这个问题?

哦,我在清单中有相关的权限,我一直在搜索这个东西的修复程序。。。并且在内部存储中也不起作用。我完全迷路了。这是我用来重命名文件的函数,如果它能帮助别人。。。但我认为这是"内部SD卡"设备的问题,或者其他什么问题。

private void setFixed(File f, String ext){
    File parent = f.getParentFile();
    try {
        String name = f.getName();
        String toName = (name+"."+ext).replace(" ", "");
        //Lines that I added just to test. I saw before I call this function that the parent has write permission.
        //Log.i("Pre", parent.getCanonicalPath()+name);
        //Log.i("Post", parent.getCanonicalPath()+toName);
        //File of = new File(parent.getCanonicalPath()+name);
        //File nf = new File(parent.getCanonicalPath()+toName);
        //Log.i("Converted", String.valueOf(of.renameTo(nf)));
        File f1 = new File(parent.getAbsolutePath()+toName);
        boolean success = f.renameTo(f1);
        Log.i("File renamed?", String.valueOf(success));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

非常感谢!

请阅读renameTo(File)的文档(单击方法并按ctrl+Q)。

将此文件重命名为newPath。两者都支持此操作文件和目录。许多故障都是可能的。更多可能的失败包括:上需要写入权限同时包含源路径和目标路径的目录。搜索两个路径的所有父级都需要权限。两条路径都打开相同的安装点。在安卓系统上,应用程序最有可能受到攻击尝试在内部存储和之间复制时的此限制SD卡。请注意,此方法不会在上引发IOException失败调用方必须检查返回值。

正如您所看到的,搜索权限是必需的。请确保将其添加到清单中。

您还需要更改

File f1 = new File(parent.getAbsolutePath()+toName);

File f1 = new File(parent.getAbsolutePath().toString()+ "/" +toName);

最新更新