Android文件编写,阅读

时间:2011-03-07 18:58:14

标签: android file

我有一个带微调器的对话框和一个OK按钮。我还有一个arraylist,由用户选择微调器中的项目填充。我希望应用程序将arraylist保存到文件中并在每次启动时加载它(因为在启动时不保存arraylist总是为空)。

所以这是我正在使用的代码。保存应该没问题,至少我得到Toast消息说保存确定。此代码是OKbtn侦听器,因此当用户单击“确定”时,会将一个项目添加到arraylist中,并且会出现以下代码:

if (assignArr.size() > 0)
                      {
                        String filename = "file.txt"; 
                        ArrayList<String> report = new ArrayList<String>(); 

                        for (int i=0; i<assignArr.size(); i++)
                        {
                            report.add(assignArr.get(i)); 
                        }

                                FileOutputStream fos; 
                                                try { 
                                                        fos = openFileOutput(filename,Context.MODE_PRIVATE); 
                                        ObjectOutputStream out = new ObjectOutputStream(fos); 
                                        out.writeObject(report); 
                                        out.close(); 
                                        Toast.makeText(MainActivity.this, "Saving OK", Toast.LENGTH_LONG).show();
                                                } catch (FileNotFoundException e) { 
                                                        // TODO Auto-generated catch block 
                                                        e.printStackTrace(); 
                                                } catch (IOException e) { 
                                                        // TODO Auto-generated catch block 
                                                        e.printStackTrace(); 
                                                }
                      }  

我把加载部分放在代码的开头,但我觉得不重要:

words = new ArrayList<String>(50);   
        try { 
        InputStream is = getResources().getAssets().open("file.txt"); 

        BufferedReader br = new BufferedReader(new InputStreamReader(is)); 
        String line; 

        while((line = br.readLine()) != null) 
        { 
              words.add(line); 
        } 
        is.close(); 
        } 
        catch (IOException e) 
        { 
          e.printStackTrace(); 
        } 

        if (words.size() > 0)
        {
            for (int i=0; i<words.size(); i++)
            {
                assignArr.add(words.get(i));
                Toast.makeText(MainActivity.this, "Loading OK", Toast.LENGTH_LONG).show();
            }
        }

在这种情况下,我永远不会收到祝酒词。 一个问题可能是文件在哪里创建?在模拟器中哪里和手机上的位置?关于手机,是在SD卡还是手机内存上创建的? 我希望这是保存和加载arraylist的正确代码。 代码有什么问题?

更新: 我将InputStream is = getResources().getAssets().open("file.txt");替换为InputStream is = openFileInput("file.txt"); 现在发生了什么。我将保存和加载的结果写出一个toast消息,这很奇怪:

  Toast.makeText(MainActivity.this, "Saving OK + " + report, Toast.LENGTH_LONG).show();

请看一下。底部的单词部分是匈牙利名字。所以也许将arraylist保存到文件中就是问题。

enter image description here

1 个答案:

答案 0 :(得分:0)

您通过openFileOutput创建的文件会写入您应用的私人目录,您可以使用Context#getFilesDir()(通常是/data/data/<your-app-package>/)。< / p>

此目录与资产文件夹无关。