【问题标题】:move file uploaded from nanohttpd's Temporary directory to SD card将上传的文件从 nanohttpd 的临时目录移动到 SD 卡
【发布时间】:2014-01-19 02:34:48
【问题描述】:

我正在将文件“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 可以写入,为什么我无法移动文件?

【问题讨论】:

    标签: android nanohttpd


    【解决方案1】:

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

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

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

    【讨论】:

    • 我在这里找到了code。 . .thanks @Henry
    猜你喜欢
    • 2013-12-26
    • 2013-04-09
    • 2020-01-11
    • 1970-01-01
    • 2014-08-14
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    相关资源
    最近更新 更多