![](/img/trans.png)
[英]Android - java.io.FileNotFoundException: /storage/emulated/0/Notes/File.txt: open failed: ENOENT (No such file or directory)
[英]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
}
提示:
Environment.getExternalStorageDirectory()+"/Android/data/MyApplication/MyFile.ics
为getActivity().getExternalFilesDir(null)+"/MyFiles.ics"
(这不是强制性的,只是为了减少代码的大小) 并且如果您的应用程序目标高于或等于 Android 10,则在应用程序标签内添加android:requestLegacyExternalStorage="true"
像:
<application
....
android:requestLegacyExternalStorage="true"
....>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.