File.renameTo返回false

时间:2018-04-16 07:36:35

标签: android file file-rename

我想重命名我的png文件。图像当前路径如下:

/storage/emulated/0/Android/data/sample.png

我想将此图片保存在app的文件目录下。我在运行时给出了写外部存储权限。

File toFileDir = new File(getFilesDir() + "images");
if(toFileDir.exists()) {
    File file = new File("/storage/emulated/0/Android/data/sample.png");
    File toFile = new File(getFilesDir() + "images/sample-1.png");
    file.renameTo(toFile);
}

renameTo返回false。但我无法理解原因。

2 个答案:

答案 0 :(得分:0)

内部和外部存储器是两个不同的文件系统。因此renameTo()失败。

您必须复制文件并删除原始文件

Original answer

答案 1 :(得分:0)

您可以尝试以下方法:

private void moveFile(File src, File targetDirectory) throws IOException {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        if (!src.renameTo(new File(targetDirectory, src.getName()))) {
            // If rename fails we must do a true deep copy instead.
            Path sourcePath = src.toPath();
            Path targetDirPath = targetDirectory.toPath();
            try {
                Files.move(sourcePath, targetDirPath.resolve(sourcePath.getFileName()), StandardCopyOption.REPLACE_EXISTING);
            } catch (IOException ex) {
                throw new IOException("Failed to move " + src + " to " + targetDirectory + " - " + ex.getMessage());
            }
        }
    } else {
        if (src.exists()) {
            boolean renamed = src.renameTo(targetDirectory);
            Log.d("TAG", "renamed: " + renamed);
        }
    }
}