Java Can';t将我的arrayList按预期写入文件
我有一个方法,应该将Java Can';t将我的arrayList按预期写入文件,java,android,file,android-activity,Java,Android,File,Android Activity,我有一个方法,应该将arrayList写入一个文件: private ArrayList<String> readFromFile() { String ret = ""; ArrayList<String> list = new ArrayList<String>(); try { InputStream inputStream = openFileInput("jokesBody.bjk"); if (inputStrea
arrayList
写入一个文件:
private ArrayList<String> readFromFile() {
String ret = "";
ArrayList<String> list = new ArrayList<String>();
try {
InputStream inputStream = openFileInput("jokesBody.bjk");
if (inputStream != null) {
InputStreamReader inputStreamReader = new InputStreamReader(
inputStream);
BufferedReader bufferedReader = new BufferedReader(
inputStreamReader);
String receiveString = "";
StringBuilder stringBuilder = new StringBuilder();
while ((receiveString = bufferedReader.readLine()) != null) {
list.add(receiveString);
}
inputStream.close();
ret = stringBuilder.toString();
System.out.println("DA CRAZY FILE: " + ret);
}
} catch (FileNotFoundException e) {
Log.e("login activity", "File not found: " + e.toString());
} catch (IOException e) {
Log.e("login activity", "Can not read file: " + e.toString());
}
return list;
}
但它抛出以下异常:
02-12 09:21:10.227: E/Exception(2445): File write failed: java.io.FileNotFoundException: /jokesBody.bjk: open failed: EROFS (Read-only file system)
错误在哪里,默认应用程序文件位置在哪里?我知道我遗漏了一些小东西,但作为一个android初学者,我无法发现它。这不是:
java.io.FileNotFoundException: /jokesBody.bjk: open failed: EROFS (Read-only file system)
问题是什么?您正在写入不可写入的区域。更改您的写作目的地(也许-我不熟悉Android,但我认为这是可能的)您的文件似乎是只读的。您不能写入只读文件 我认为你并没有把文件保存在你认为的地方。查看将文件写入外部存储器的步骤。有几件事: (1) 您需要在清单中请求写入外部存储的权限。如果不是,则最终将出现只读情况 (2) 在写入代码之前,需要在代码中获取外部存储目录。首先,应该对文件目录是否可写进行常规检查:
public boolean isExternalStorageWritable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
return true;
}
return false;
}
然后,您可以为要存储的文件创建一个特定目录,并将它们存储在该位置,以便以后可以找到它们。例如:
public File getAlbumStorageDir(String albumName) {
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), albumName);
if (!file.mkdirs()) {
Log.e(LOG_TAG, "Directory not created");
}
return file;
}
然后,您可以将内容写入返回的文件当您为Android开发时,您必须从以下位置获取输出流:
关于如何在Android上使用文件的解释如下:我知道你没有写权限,但奇怪的是,当我使用
InputStream
时,一切都正常,但当我更改为FileOutputStream
时,该区域被禁止……这并不让我感到惊讶。仅仅因为我可以从InputStream
创建一些东西,并不意味着我正在写入的文件或区域是一个可写目录。这就是为什么您需要首先检查要写入的内容,获取适当的文件位置,然后在那里写入。我明白了,但奇怪的是,当我使用InputStream
时,一切都正常,但当我更改为FileOutputStream
时,该区域被禁止。。。在我的情况下,临时文件不起作用:(
public File getAlbumStorageDir(String albumName) {
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), albumName);
if (!file.mkdirs()) {
Log.e(LOG_TAG, "Directory not created");
}
return file;
}
fos = context.openFileOutput("jokesBody.bjk", Context.MODE_PRIVATE);