java - 在 Android 中创建文本文件会导致 FileNotFoundException
问题描述
我正在开发一个通过 BLE 获取数据并将其保存在文本文件中的应用程序。
现在的问题是我无法使用我的应用程序创建文本文件。
我已经尝试过这个线程的答案:如何在 Android 上创建文本文件并将数据插入该文件 所以请不要将其标记为重复,因为那里提供的答案对我不起作用..
对应的代码是:
try {
System.out.println(Environment.getExternalStorageState());
File root =new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS), "BLE_Crawler");
if (!root.exists()) {
root.mkdirs();
}
File file = new File(root, fileName +".txt");
if (!file.exists()) {
file.createNewFile();
}
FileWriter writer = new FileWriter(file, true);
writer.append("test");
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
我得到的错误是:
W/System.err: java.io.FileNotFoundException: /storage/emulated/0/Documents/BLE_Crawler/test.txt: open failed: ENOENT (No such file or directory)
似乎我无权创建新文件夹,因为“mkdirs()”行不起作用。但我不知道如何解决这个问题。
哦,我有
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
在我的 AndroidManifest 中。
我正在使用 SDKVersion 29。
解决方案
您是否尝试过添加:
android:requestLegacyExternalStorage="true"
到<application>
标签中的清单?另外,不要忘记,从 Android 6.0 开始,即使您将权限写入 Manifest,您也需要请求权限。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
String[] permissions = new String[]{READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE};
for (int i = 0; i < permissions.length; i++) {
if (checkSelfPermission(permissions[i]) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(permissions,
REQUEST_PERMISSIONS);
return;
}
}
}
推荐阅读
- javascript - 我可以从 javascript 调用网络服务吗?
- python - 我使用的 CSV 文件格式很奇怪,无法使用
- ios - 禁用特定 VC 的推送通知
- angular - Angular 8 - 静态链接
- laravel - 如何测量惯性应用程序的页面加载性能
- amazon-web-services - Web 应用程序如何与 AWS Cloudfront 共享签名 cookie?
- laravel - 如何提取所有关于 API 的 Amazon SES 统计数据?
- xamarin.forms - 具有自定义功能的底部栏
- firebase - 扑。当用户更新个人资料图片时,我希望管理员批准
- python - Python中梯度下降的数值优化