Android - java.io.FileNotFoundException: /storage/emulated/0/Notes/File.txt: 打开失败: ENOENT (没有那个文件或目录)
Android - java.io.FileNotFoundException: /storage/emulated/0/Notes/File.txt: open failed: ENOENT (No such file or directory)
我发现很多主题都有同样的问题,但他们无法解决我的问题。
我最初写一个文件如下:`
File root = new File(Environment.getExternalStorageDirectory(), "Notes");
if (!root.exists()) {
root.mkdirs();
}
File notefile = new File(root, sFileName);
FileWriter writer = null;
try {
writer = new FileWriter(notefile);
} catch (IOException e1) {
e1.printStackTrace();
}
try {
writer.append(sBody);
} catch (IOException e1) {
e1.printStackTrace();
}
try {
writer.flush();
} catch (IOException e1) {
e1.printStackTrace();
}
try {
writer.close();
} catch (IOException e1) {
e1.printStackTrace();
}
不要担心 try 和 catch 块,我稍后会清除它们:D。
这是应该在同一目录中工作的 reader (如果 sdcard 的 "Notes" 不存在,将被创建),读取文件,并将其放在 Notify 上可以看到:`
File root = new File(Environment.getExternalStorageDirectory(), "Notes");
if (!root.exists()) {
root.mkdirs();
}
File file = new File(root, "Nota.txt");
//Read text from file
text = new StringBuilder();
try {
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
while ((line = br.readLine()) != null) {
text.append(line);
text.append('\n');
}
br.close() ;
}catch (IOException e) {
e.printStackTrace();
}
我真的不明白为什么我会遇到这个问题,我什至尝试
getExternalStorageDirectory().getAbsolutePath()
但没有成功。
有人可以帮助我吗?
您在执行以下操作时已尝试使用调试器检查 root 是否存在:
File root = new File(Environment.getExternalStorageDirectory(), "Notes");
if (!root.exists()) {
root.mkdirs();
}
我认为它不会在您写入文件时创建文件夹
要在外部存储中写入文件,
您需要启用 WRITE_EXTERNAL_STORAGE 权限。
为什么要尝试在外部存储中写入文件?
我的意思是,如果您只想将此文件用于您的应用程序,则使用 context.getExternalDirs() 获取您应用程序的沙箱,它不需要写权限,高于 android 4.2(Jelly bean ).
如果您想将文件共享到其他应用程序,那您做对了。
并且在写入文件之前,检查外部存储是否以编程方式挂载。
问题已解决
我用了 SharedPreferences 个 Android。
我将数据存储在 MainActivity 中,并按如下方式接收到我的 Class 中:
MainActivity
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("string_id", InputString); //InputString: from the EditText
editor.commit();
在我Class获取我的数据
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
String data = prefs.getString("string_id", "no id"); //no id: default value
我发现很多主题都有同样的问题,但他们无法解决我的问题。 我最初写一个文件如下:`
File root = new File(Environment.getExternalStorageDirectory(), "Notes");
if (!root.exists()) {
root.mkdirs();
}
File notefile = new File(root, sFileName);
FileWriter writer = null;
try {
writer = new FileWriter(notefile);
} catch (IOException e1) {
e1.printStackTrace();
}
try {
writer.append(sBody);
} catch (IOException e1) {
e1.printStackTrace();
}
try {
writer.flush();
} catch (IOException e1) {
e1.printStackTrace();
}
try {
writer.close();
} catch (IOException e1) {
e1.printStackTrace();
}
不要担心 try 和 catch 块,我稍后会清除它们:D。 这是应该在同一目录中工作的 reader (如果 sdcard 的 "Notes" 不存在,将被创建),读取文件,并将其放在 Notify 上可以看到:`
File root = new File(Environment.getExternalStorageDirectory(), "Notes");
if (!root.exists()) {
root.mkdirs();
}
File file = new File(root, "Nota.txt");
//Read text from file
text = new StringBuilder();
try {
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
while ((line = br.readLine()) != null) {
text.append(line);
text.append('\n');
}
br.close() ;
}catch (IOException e) {
e.printStackTrace();
}
我真的不明白为什么我会遇到这个问题,我什至尝试
getExternalStorageDirectory().getAbsolutePath()
但没有成功。
有人可以帮助我吗?
您在执行以下操作时已尝试使用调试器检查 root 是否存在:
File root = new File(Environment.getExternalStorageDirectory(), "Notes");
if (!root.exists()) {
root.mkdirs();
}
我认为它不会在您写入文件时创建文件夹
要在外部存储中写入文件, 您需要启用 WRITE_EXTERNAL_STORAGE 权限。
为什么要尝试在外部存储中写入文件?
我的意思是,如果您只想将此文件用于您的应用程序,则使用 context.getExternalDirs() 获取您应用程序的沙箱,它不需要写权限,高于 android 4.2(Jelly bean ).
如果您想将文件共享到其他应用程序,那您做对了。
并且在写入文件之前,检查外部存储是否以编程方式挂载。
问题已解决
我用了 SharedPreferences 个 Android。 我将数据存储在 MainActivity 中,并按如下方式接收到我的 Class 中:
MainActivity
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); SharedPreferences.Editor editor = prefs.edit(); editor.putString("string_id", InputString); //InputString: from the EditText editor.commit();
在我Class获取我的数据
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); String data = prefs.getString("string_id", "no id"); //no id: default value