我试图重命名一个文件以添加它的扩展名。我正在检测文件的类型,并希望将扩展名附加到文件中。这一切都很好,但我有一个索尼Xperia Z2进行测试,一些奇怪的事情发生。在其他设备和仿真器中,工作起来就像一种魅力,但在这一种.不可能的。
它总是返回false,尽管它在父文件夹中有写权限,但它是同一个文件夹,它只附加一个".jpg“或".png”或类似的东西。由于File.renameTo
函数没有给出任何错误,只是抛出错误,我无法确定是否只有我.但我开始相信,这与它如何管理内部/外部存储有关。内部存储实际上是sdcard0,外部存储是sdcard1。有些应用程序,如ES文件管理器,询问我的sdcard的根目录在哪里,这样它就可以重命名、移动或复制我的sdcard中的文件。Airdroid让我做同样的事。为什么会发生这种事?我怎么才能解决这个问题?
哦,而且我在舱单上有相关的权限,我一直在寻找这个东西的修复方法.在内部存储中也不起作用。我完全迷路了。这是我用来重命名文件的函数,如果它对某人有帮助.但我认为这是“内部sdcard”设备的问题,或者什么的。
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();
}
}
非常感谢!
发布于 2016-04-11 08:15:56
请阅读renameTo(File)
文档(单击该方法并按ctrl + Q)。
将此文件重命名为newPath。文件和目录都支持此操作。许多失败是可能的。一些更可能的失败包括:需要对包含源路径和目标路径的目录使用写权限。两个路径的所有父级都需要搜索权限。两条路径都位于相同的挂载点上。在Android上,当尝试在内部存储和SD卡之间进行复制时,应用程序最有可能遇到这个限制。注意,此方法不会在失败时抛出IOException。调用者必须检查返回值。
如您所见,搜索权限是必需的。确保将此添加到清单中。
你也需要改变
File f1 = new File(parent.getAbsolutePath()+toName);
至
File f1 = new File(parent.getAbsolutePath().toString()+ "/" +toName);
https://stackoverflow.com/questions/36494605
复制相似问题