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

时间:2016-04-08 08:08:38

标签: java android

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

它始终返回false,尽管它在父文件夹中具有写入权限,它是相同的文件夹,并且它只附加“.jpg”或“.png”或类似的东西。由于File.renameTo函数没有给出任何错误,只是抛出错误,我无法确定它是否只有我......但我开始相信它是如何管理内部/外部存储的。内部存储实际上是sdcard0,外部是sdcard1。一些应用程序,如ES文件管理器,询问我的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();
    }
}

非常感谢!

0 个答案:

没有答案