我有一个带微调器的对话框和一个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保存到文件中就是问题。
答案 0 :(得分:0)
您通过openFileOutput
创建的文件会写入您应用的私人目录,您可以使用Context#getFilesDir()
(通常是/data/data/<your-app-package>/
)。< / p>
此目录与资产文件夹无关。