Android文件阅读问题

时间:2011-03-15 18:44:48

标签: android file

我有文件阅读问题。我会说不出话来。 当用户按下OK btn时,会向assignArr ArrayList添加一个字符串。此时,此字符串将保存到文件中。当用户将新字符串(通过按下OK btn)添加到Arraylist时,只有前一个和新项目在其中,因此没有重复。这就是我将okbtn监听器中的arraylist保存到文件的方式:

    if (assignArr.size() > 0)
                  {
                    String filename = "tomato35.txt"; 
                     FileOutputStream fos; 
                    try { 
                        fos = openFileOutput(filename,Context.MODE_PRIVATE); 
                        ObjectOutputStream out = new ObjectOutputStream(fos); 
                        fos.flush();

                        for (int t=0; t<assignArr.size(); t++)
                        {
                            out.writeUTF(assignArr.get(t).toString() + "\n");
                            Toast.makeText(MainActivity.this, "Saving OK + " + assignArr.get(t), Toast.LENGTH_LONG).show();
                        }

                        out.close(); 
                        } catch (FileNotFoundException e) { 
                           // TODO Auto-generated catch block 
                           e.printStackTrace(); 
                        } catch (IOException e) { 
                           // TODO Auto-generated catch block 
                           e.printStackTrace(); 
                        }
                      Toast.makeText(MainActivity.this, "assignArrsize: " + assignArr.size(), Toast.LENGTH_LONG).show();
                  } 

假设我添加了字符串“Daddy Alex”。 所以输出的是“Saving OK + Daddy Alex”,这是assignArr中的一个项目。 现在我退出了应用程序,因此assignArr Arraylist变空,因为它只是一个变量。现在我重新打开我的应用程序,现在应该将文件的内容读入arraylist:

try { 
               InputStream is = openFileInput("tomato35.txt");               
               BufferedReader br = new BufferedReader(new InputStreamReader(is)); 
               String line; 
               String NL = System.getProperty("line.separator");                  
               while((line = br.readLine()) != null) 
               {
                      assignArr.add(line); 
               } 
               is.close(); 

               } 
               catch (IOException e) 
               { 
                  e.printStackTrace(); 
               } 
                for (int i=0; i<assignArr.size(); i++)
                {
                     Toast.makeText(MainActivity.this, "AssignArr." + i + " = " + assignArr.get(i), Toast.LENGTH_LONG).show();
                }

我发布了一些基于assignArr中不同字符串的输出: enter image description here

我也试过这个:

String filename = "tomato35.txt"; 
BufferedWriter bw = null;
bw = new BufferedWriter(new FileWriter(filename, true));
for (int t=0; t<assignArr.size(); t++)
{
bw.write(assignArr.get(t).toString() + "\n");
Toast.makeText(MainActivity.this, "Saving OK + " + assignArr.get(t), Toast.LENGTH_LONG).show();
}
bw.flush();

PrintWriter f;
File file ;
file = new File("tomato44.txt");
f = new PrintWriter(file);
for (int t=0; t<assignArr.size(); t++)
{
f.println(assignArr.get(t).toString());
 Toast.makeText(MainActivity.this, "Saving OK + " + assignArr.get(t), Toast.LENGTH_LONG).show();
}
f.close();

但在这些情况下,我甚至没有得到Toast msg ......

我不知道为什么这些是错的。有时第一次输出是正常的,但是当我向assignArr添加另一个项目时,写入文件,退出然后重新打开应用程序,这第二项是错误的,但第一项是正确的。我几天来一直在努力奋斗......

1 个答案:

答案 0 :(得分:0)

确保你的清单中有这个:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />