gpt4 book ai didi

java - Android File.renameTo 在我测试的 Sony 设备中总是返回 false

转载 作者:行者123 更新时间:2023-12-05 07:50:03 26 4
gpt4 key购买 nike

我正在尝试重命名文件以添加扩展名。我正在检测文件的类型,并想将扩展名附加到文件中。一切正常,但我有一台 Sony Xperia Z2 用于测试,但发生了一些奇怪的事情。在其他设备和模拟器中,工作起来就像一个魅力,但在这个......这是不可能的。

它总是返回 false,尽管它在父文件夹中有写权限,它是同一个文件夹,它只附加一个“.jpg”或“.png”或类似的东西。由于 File.renameTo 函数没有给出任何错误,只是抛出错误,我不能确定是否只有我一个人...但我开始相信这是关于它如何管理内部/外部存储。内部存储其实是sdcard0,外部是sdcard1。一些应用程序,如 ES 文件管理器,会询问我的 sdcard 的根目录在哪里,因此它可以重命名、移动或复制我的 sdcard 中的文件。 Airdroid 让我做同样的事情。为什么会这样?我该如何解决这个问题?

哦,我在 list 中有相关权限,我一直在寻找解决这个问题的方法……但在内部存储中也不起作用。我完全迷路了。这是我用来重命名文件的功能,如果它对某人有帮助...但我认为这是“内部 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();
}
}

非常感谢!

最佳答案

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

Renames this file to newPath. This operation is supported for both files and directories. Many failures are possible. Some of the more likely failures include: Write permission is required on the directories containing both the source and destination paths. Search permission is required for all parents of both paths. Both paths be on the same mount point. On Android, applications are most likely to hit this restriction when attempting to copy between internal storage and an SD card. Note that this method does not throw IOException on failure. Callers must check the return value.

如您所见,需要搜索权限。确保将其添加到 list 中。

你还需要改变

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

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

关于java - Android File.renameTo 在我测试的 Sony 设备中总是返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36494605/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com