1

我正在将文件“LICENSE.txt”从我的 PC 上传到 Android WebServerApp。NanoHTTPD 使用一个临时目录来保存上传的文件。临时位置由以下决定:

    tmpdir = System.getProperty("java.io.tmpdir");

文件上传为:/data/data/com.manmohan.mynanoserver/cache/NanoHTTPD-1736025823在我的例子中。

上传后,我想将文件移动到我的 SD 卡“/storage/extSdCard/Uploads”。

这就是我所做的:

        String tempFileName = entry.getValue().toString();
        File fileToMove = new File(tempFileName); // temp file path returned by NanoHTTPD

        String p = "/storage/extSdCard/Uploads";
        String newFile = p + "/LICENSE.txt";
        File nf = new File(newFile); // I want to move file here

        if (fileToMove.canWrite()) {
            boolean success = fileToMove.renameTo(nf);
            if (success == true) {
                // LOG to console
                Log.i("FILE_MOVED_TO", newFile);
            } else {
                Log.e("FILE_MOVE_ERROR", tempFileName);
            }
        } else {
            Log.e("PERMISSION_ERROR_TEMP_FILE", tempFileName);
        }

我无法访问/data/。. . 目录和其中的文件,并在尝试移动文件时出错。

但是这个临时路径有效:

    tmpdir = "/storage/extSdCard/temp-uploads-nanohttpd";

java.io.tmpdir有什么问题?如果 NanoHTTPD 可以写入,那么为什么我无法移动文件?

4

1 回答 1

1

由于源和目标位于不同的文件系统上,因此不可能进行简单的重命名。该renameTo方法的文档指出:

此方法行为的许多方面本质上与平台相关:重命名操作可能无法将文件从一个文件系统移动到另一个文件系统,它可能不是原子的,并且如果文件具有目标抽象路径名,它可能不会成功已经存在。应始终检查返回值以确保重命名操作成功。

要解决此问题,请将文件复制到新位置并从旧位置删除。

于 2014-01-04T06:56:45.997 回答