我正在寻求您的帮助,我被困在我的安卓项目中,我找不到解决方案。
解释:
我使用 FileUtils.copyURLToFile(url, file( 从互联网上的 URL 中检索一个 .ics (iCalendar( 文件,其中包含 Apache Common 库。 它运行良好,我的文件是用我的数据创建的,并且是可读的。
我将文件保存在路径中:/storage/emulated/0/Android/data/MyApplication/MyFile.ics。
我可以在此地址的手机(Android Pie(和/或模拟器(Android Oreo(的文件中看到它。所以它被很好地创造和呈现。
但是当我想使用 iCal4j 库解析我的文件时,我收到包含 FileInputStream 的行的错误,告诉我我的文件或目录在此地址不存在。
编辑我指定我使用 file.exist(( 检查我的文件是否存在。如果它存在,那么它会调用函数来解析我的文件。我在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"
....>