Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';t将我的arrayList按预期写入文件_Java_Android_File_Android Activity - Fatal编程技术网

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);