我正在从我的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可以写入,那么为什么我无法移动文件?
答案 0 :(得分:1)
由于源和目标位于不同的文件系统上,因此无法进行简单的重命名。 renameTo
方法的文档说明:
此方法行为的许多方面本质上都依赖于平台:重命名操作可能无法将文件从一个文件系统移动到另一个文件系统,它可能不是原子的,并且如果文件具有目标抽象路径名已存在。应始终检查返回值以确保重命名操作成功。
要解决此问题,请将文件复制到新位置并将其从旧位置删除。