将从nanohttpd的临时目录上传的文件移动到SD卡

时间:2014-01-01 14:16:42

标签: android nanohttpd

我正在从我的PC上传文件“LICENSE.txt”到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可以写入,那么为什么我无法移动文件?

1 个答案:

答案 0 :(得分:1)

由于源和目标位于不同的文件系统上,因此无法进行简单的重命名。 renameTo方法的文档说明:

  

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

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