我正在尝试创建并写入Android中的外部文件。我的最小SDK为14,目标SDK为18.我的清单中的WRITE_EXTERNAL_STORAGE权限位于正确的位置。以下是我创建和设置要创建的文件的文件路径的行为:
String state = Environment.getExternalStorageState();
if(!state.equals(Environment.MEDIA_MOUNTED)) {
textView.setText("No external storage mounted");
} else {
File externalDir = Environment.getExternalStorageDirectory();
File dir = new File(externalDir.getAbsolutePath() + "/tests-folder");
dir.mkdir();
if(!dir.exists()) {
Log.i(null, "Does not exist"); // This gets printed - Why?
}
File textFile = new File(dir, "test.txt");
try {
writeTextFile(textFile, "This is a test!");
String text = readTextFile(textFile);
textView.setText(text);
} catch (IOException ex){
textView.setText("Something went wrong!" + ex.getMessage());
}
}
我一直收到错误'出错了!/storage/sdcard0/tests-folder/test.txt:open failed:ENOENT(没有这样的文件或目录)。 writeTextFile()方法是:
private void writeTextFile(File file, String text) throws IOException {
BufferedWriter writer = new BufferedWriter(new FileWriter(file)); // When I debug, it comes up until here and then returns with the exception
writer.write(text);
writer.close();
}
当它遇到writeTextFile()方法的第一行时,代码返回异常。我的猜测是文件没有被创建。打印日志行“不存在”。为什么是这样?我用手机和模拟器试了一下。我在安装和检查后尝试断开手机,没用。
如果我修改文件路径以在外部目录的根文件夹中创建文件,我会收到EACCES Permission denied错误。
答案 0 :(得分:0)
您确定自己错过了路径中/
和sdcard
之间的0
吗?
答案 1 :(得分:0)
我弄清楚出了什么问题 - 看起来这个特定文件要么损坏了某些东西,要么触发了一些奇怪的错误。我在同一个文件夹中的另一个包中创建了另一个具有不同名称的活动,并且运行良好(代码是复制粘贴的,所以没有任何改变)。然后我删除了这个文件并重新创建它,它运行得很好。不知道为什么会发生这种情况,只是为了防止其他人在将来遇到这种情况。
在此之前,我创建了一个单独的项目并键入了相同的代码并且它有效。所以我回来试图做一个项目 - >通过Eclipse清理,但这也不起作用。