在 Android 中创建文本文件导致 FileNotFoundException
Creating a Text File in Android results in 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 中。
我使用的是 SDK 版本 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;
}
}
}
我正在开发一个通过 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 中。
我使用的是 SDK 版本 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;
}
}
}