如何解决在Android中创建文本文件会导致FileNotFoundException
我正在开发一个通过BLE获取数据并将其保存在文本文件中的应用程序。
现在的问题是我无法使用我的应用程序创建文本文件。
我已经尝试过以下线程的答案:How to create text file and insert data to that file on 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开始,即使您在清单中编写权限,也需要请求权限。
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;
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。