【问题标题】:java.io.FileNotFoundException Access is denied in Androidjava.io.FileNotFoundException 访问在 Android 中被拒绝
【发布时间】:2015-05-10 13:41:02
【问题描述】:

我正在尝试将我的输出文件存储在内存中。但它抛出 java.io.FileNotFoundException 访问被拒绝

private boolean crop() {
    try {
        FileOutputStream fos = null;
        String filePath = CustomVideoGalleryActivity.videoPath.get(0);
      Movie originalMovie = MovieCreator.build(filePath);

      Track track = originalMovie.getTracks().get(0);
      Movie movie = new Movie();
      movie.addTrack(new AppendTrack(new CroppedTrack(track, 200, 800)));

      Container out = new DefaultMp4Builder().build(movie);
      String outputFilePath = Environment.getDataDirectory()+ "/output_crop.mp4";
      fos = new FileOutputStream(new File(outputFilePath)); //throws Exception
      out.writeContainer(fos.getChannel());
      fos.close();
      mProgressDialog.dismiss();
      finish();

    } catch (Exception e) {
        Log.v("ONMESSAGE", e.toString());
      e.printStackTrace();
      mProgressDialog.dismiss();
      return false;
    }
    return true;
  }

【问题讨论】:

    标签: android java-io


    【解决方案1】:

    您需要在您的AndroidManifest.xml 中添加ask for write permission。特别是,必须存在以下行:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    

    【讨论】:

    • 先生,我想将它存储在我设备的内部存储中。我已经在我的清单文件中添加了 android.permission.WRITE_EXTERNAL_STORAGE 权限。但它不工作
    • 糟糕,我的错误。你不能写信给/data。见stackoverflow.com/questions/1998400/…
    • 不,先生。几天前我已经检查了我的程序。它运行良好。它正在将我的输出文件存储到我设备的内部存储器中。但现在它在我的 logcat 中显示异常
    • 从那以后您是否更新了您的设备? (从 3.x 到 4.x?)
    【解决方案2】:

    您不应该查看数据目录。这是手机存储中的系统目录 - 通常是 /data - 您的应用程序永远不会有写入权限。

    Context.getFilesDir() 方法返回您的应用程序应该写入文件的目录。它将类似于 /data/data/com.yourdomain.YourApp/files。

    如果要写入手机存储中的文件,请使用 Context.openFileOutput() 方法。

    如果您想要 SDCard 的路径,请使用 Environment.getExternalStorageDirectory() 方法。要写入 SDCard,您需要通过将以下内容添加到您的 Manifest 来为您的应用程序授予适当的权限:

    如果您要写入 SDCard,您还需要使用 getExternalStorageState() 方法检查其状态。

    如果您要存储与应用程序相关的小文件,那么这些文件可能会进入手机的存储空间而不是 SD 卡,因此请使用 Context.openFileOutput() 和 Context.openFileInput() 方法。

    所以在您的代码中考虑如下内容:

    OutputStream os = openFileOutput("samplefile.txt", MODE_PRIVATE);
    BufferedWriter lout = new BufferedWriter(new OutputStreamWriter(os));
    

    【讨论】:

      猜你喜欢
      • 2011-05-15
      • 2015-08-14
      • 1970-01-01
      • 2013-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多