我使用下面的代码在Android中移动文件。
public static void moveFile(String inputPath, String inputFile, String outputPath, String absolutePath) {
InputStream in = null;
OutputStream out = null;
try {
//create output directory if it doesn't exist
File dir = new File (outputPath);
if (!dir.exists())
{
dir.mkdirs();
}
in = new FileInputStream(inputPath + inputFile);
out = new FileOutputStream(outputPath + inputFile);
byte[] buffer = new byte[1024];
int read;
while ((read = in.read(buffer)) != -1) {
out.write(buffer, 0, read);
}
in.close();
in = null;
// write the output file
out.flush();
out.close();
out = null;
// delete the original file
new File(absolutePath).delete();
}
catch (FileNotFoundException fnfe1) {
Log.e("Moving file not found", fnfe1.getMessage());
}
catch (Exception e) {
Log.e("While Moving", e.getMessage());
}
但大部分时间它都会显示错误,如下所示:
找不到移动文件:/call_14-43-46_IN_+919737276726.amr(只读文件系统)
我已经检查过,要移动的文件是普通文件,并且只有在被Call Recorder录制时才能读取。 请帮忙。
答案 0 :(得分:0)
在Android中,您无法直接访问根目录(/),它以只读方式挂载。检查你的路径,不应该尝试写入或读取/无论如何。
答案 1 :(得分:0)
您需要问问自己,您的文件是否应该可供“外部”世界使用,或者您的程序本身是否需要这些文件。根据该决定,您有几个选择:
Context
(例如活动)的实例知道openFileOutput
和openFileInput
。两个返回流都可以在没有进一步权限的情况下使用,但是将文件存储在应用程序私有的位置。
如果您需要暂时只提供文件,请考虑Context.getCacheDir
。或者,Java-way:File.createTempFile
。值得研究的另一种方法是Context.getExternalFilesDir
。
附注:不要手动将路径粘贴在一起,我建议使用新的File("path", "dir").getAbsolutePath