繁体   English   中英

java.io.FileNotFoundException:/storage/emulated/0/Android/data/MyApplication/MyFile.ics。 (没有这样的文件或目录)/ Android Studio / Ical4j

[英]java.io.FileNotFoundException: /storage/emulated/0/Android/data/MyApplication/MyFile.ics. (No such file or directory) / Android Studio / Ical4j

我正在寻求您的帮助,我被困在我的 android 项目中,找不到解决方案。

解释:

我使用 FileUtils.copyURLToFile(url, file) 从 inte.net 上的 URL 和 Apache Common 库中检索 an.ics (iCalendar) 文件。 它工作得很好,我的文件是用我的数据创建的,并且是可读的。

我将文件保存在路径中: /storage/emulated/0/Android/data/MyApplication/MyFile.ics。

我可以在这个地址的手机(Android Pie)和/或模拟器(Android Oreo)的文件中看到它。 所以它被很好地创造和呈现。

但是当我想用 iCal4j 库解析我的文件时,我收到包含 FileInputStream 的行的错误,告诉我我的文件或目录不存在于该地址。

编辑我指定我使用 file.exist() 检查我的文件是否存在。 如果它存在,那么它会调用 function 来解析我的文件。 我对 FileInputStream 有疑问的地方。 所以是的,file.exist() 告诉我它存在。

    File file = new File(Environment.getExternalStorageDirectory() + "/Android/data/MyApplication/MyFile.ics");

    FileInputStream fin = new FileInputStream(file.getPath());

    CalendarBuilder builder = new CalendarBuilder();

    Calendar calendar = builder.build(fin);

我有一个错误。

我的错误:

W/System.err: java.io.FileNotFoundException: /storage/emulated/0/Android/data/MyApplication/MyFile.ics (No such file or directory)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(FileInputStream.java:200)
    at java.io.FileInputStream.<init>(FileInputStream.java:150)
    at java.io.FileInputStream.<init>(FileInputStream.java:103)

我的清单 xml

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

我还询问了用户访问存储的权限:

requestPermissions(new String[]{WRITE_EXTERNAL_STORAGE,READ_EXTERNAL_STORAGE}, 1);

我希望我足够清楚以获得帮助,谢谢。

尝试使用以下代码File file = new File(Environment.getExternalStorageDirectory() + "/MyApplication/MyFile.ics");

如果请求了所有的权限,还是会提示权限请求失败。 估计是Android 10.0的适配问题。 您可以在下面添加它

    <application
       ...
    android:requestLegacyExternalStorage="true"
       ...
        >

https://developer.android.com/training/data-storage/use-cases

File file = new File(Environment.getExternalStorageDirectory()+"/Android/data/MyApplication/MyFile.ics");
if(file.createNewFile(){
   FileInputStream fin = new FileInputStream(file.getPath());
   // Your entire code
}
else{
   //File exist already Handle it
 }

提示:

  1. Environment.getExternalStorageDirectory()+"/Android/data/MyApplication/MyFile.icsgetActivity().getExternalFilesDir(null)+"/MyFiles.ics" (这不是强制性的,只是为了减少代码的大小)
  2. 无需读写权限即可在您的持久文件夹中进行读写,因此请尽可能将其删除。

并且如果您的应用程序目标高于或等于 Android 10,则在应用程序标签内添加android:requestLegacyExternalStorage="true"

像:

    <application
    ....
    android:requestLegacyExternalStorage="true"
    ....>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM