【问题标题】:Not able to Use RandomAccessFile file for rw mode only in case when writing a file in sd card仅当在 sd 卡中写入文件时,无法将 RandomAccessFile 文件用于 rw 模式
【发布时间】:2017-09-08 03:13:33
【问题描述】:

下面是我的 start.mp4 文件的 sdcard 路径。我能够以读取模式获取此文件,但无法以rw 模式打开。我也给了运行时权限。它抛出一个异常:

/storage/3263-6232/piyush/Download/start.mp4: open failed: EACCES (Permission denied)

代码:

String sdCardPath = "/storage/3263-6232/piyush/Download/start.mp4"; 
File file = new File(sdCardPath );
try{

RandomAccessFile rfs = new RandomAccessFile(file, "rw");

rfs.seek(file.length());
rfs.close();

} catch (IOException e) {
   e.printStackTrace();
}

在上面的代码中,我将sdcardpath 带到了 sdcard 中的一个文件中。 之后,每当我尝试使用RandomAccessFile 在输出流中打开该文件时,它都会给出FilenotFound Exception

/storage/3263-6232/piyush/Download/start.mp4: open failed: EACCES (Permission denied)

【问题讨论】:

  • 因此您没有对该文件的写入权限。定义“给定的运行时权限”。为什么您需要对 .mp4 文件的写入权限?
  • 我需要加密文件并更改该文件的前 10 位。在内部存储器中但不能在 SD 卡中时,我可以做同样的事情。 @EJP

标签: java android randomaccessfile


【解决方案1】:

您的Manifest 看起来像这样吗? uses-permission 标签需要在应用标签之外

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

PS:如果您使用 Post M 设备进行测试,请确保在对您的文件进行任何操作之前征得WRITE_EXTERNAL_STORAGE 许可。

【讨论】:

    【解决方案2】:

    将您的存储位置更改为 /storage/3263-6232/Android/data/&lt;Your package Name&gt;/files 将解决您的问题

    Above Path 仅对相关第三方应用程序具有写入权限,在其他地方您可以读取文件但不能写入新文件。

    或者您需要应用存储访问框架以获得写入权限。

    更多详情,您可以访问 https://developer.android.com/guide/topics/providers/document-provider.html

    【讨论】:

      猜你喜欢
      • 2017-07-09
      • 1970-01-01
      • 2011-04-12
      • 2018-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多