在Android

时间:2017-02-06 09:30:09

标签: android file

我使用下面的代码在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录制时才能读取。 请帮忙。

2 个答案:

答案 0 :(得分:0)

在Android中,您无法直接访问根目录(/),它以只读方式挂载。检查你的路径,不应该尝试写入或读取/无论如何。

答案 1 :(得分:0)

您需要问问自己,您的文件是否应该可供“外部”世界使用,或者您的程序本身是否需要这些文件。根据该决定,您有几个选择:

Context(例如活动)的实例知道openFileOutputopenFileInput。两个返回流都可以在没有进一步权限的情况下使用,但是将文件存储在应用程序私有的位置。

如果您需要暂时只提供文件,请考虑Context.getCacheDir。或者,Java-way:File.createTempFile。值得研究的另一种方法是Context.getExternalFilesDir

附注:不要手动将路径粘贴在一起,我建议使用新的File("path", "dir").getAbsolutePath