无法读取文本文件

时间:2015-05-26 20:53:30

标签: android text-files inputstream fileinputstream inputstreamreader

我正在尝试编写和读取一个充满单词的文本文件并将其添加到ArrayList中。稍后使用ArrayList从程序的另一部分在TextView中显示文本。但是当我运行程序并打开它的特定部分时,则没有任何东西。 ArrayList只是空的。我没有任何例外,但由于某种原因,它不起作用。请帮帮我。

我似乎没有写文件的问题:

TextView txt = (TextView)findViewById(R.id.testTxt);
            safe = txt.getText().toString();

            try {
                FileOutputStream fOut = openFileOutput("test.txt", MODE_WORLD_READABLE);
                OutputStreamWriter osw = new OutputStreamWriter(fOut);
                try {
                    osw.write(safe);
                    osw.flush();
                    osw.close();
                    Toast.makeText(getBaseContext(), "Added to favorites", Toast.LENGTH_SHORT).show();
                } catch (FileNotFoundException ex){
                    Log.e("Exception", "File write failed: ");
                }
            } catch (IOException e) {
                Log.e("Exception", "File write failed: ");
            }

但我认为问题在于文件阅读。我做了一些" Log.d"并发现一切正常,直到InputStreamReader行:

public  favHacks() {       
    testList = new ArrayList<String>();

    try {

       //Works fine till here

        InputStreamReader inputStreamReader = new InputStreamReader(openFileInput("test.txt"));

        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        String receiveString = "";

        while ( (receiveString = bufferedReader.readLine()) != null ) 
        {
                testList.add(receiveString);
        }

        bufferedReader.close();


    }
    catch (FileNotFoundException ex) {
        Log.d("login activity", "File not found: ");
    } catch (IOException ex) {
        Log.d("login activity", "Can not read file: ");
    }


}

1 个答案:

答案 0 :(得分:0)

如果您要保存的密钥值集合相对较少,则应使用SharedPreferences API。

http://developer.android.com/training/basics/data-storage/shared-preferences.html

如果你想写/读文件,或做任何可以阻止主线程的操作尝试使用另一个线程,比如当你试图将数据保存在文件中时,或者如果你有多个线程(一个用于保存,一个用于读取)。

https://developer.android.com/training/multiple-threads/index.html

在你的代码中,名为favHacks的方法可以返回一个ArrayList,其中包含所有字符串的列表

//   
public ArrayList<String> readFromFile(String file){
        ArrayList<String> mArrayList= new ArrayList<String>();
        //read from file here
        return mArrayList;
    }

但正如我之前所说,你需要在新线程中阻止UI线程的操作。 https://developer.android.com/training/multiple-threads/communicate-ui.html

而且我认为最好的方法是使用Asynk任务

Why and how to use asynctask