我正在开发一个词典应用程序。应用程序上有一个收藏夹按钮,允许用户:
到目前为止,我的编码如下:
更新后的代码:
//Writing lines to myFavourite.txt
btnAddFavourite = (ImageButton) findViewById(R.id.btnAddFavourite);
btnAddFavourite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Writing the content
try {
// opening myFavourite.txt for writing
OutputStreamWriter out = new OutputStreamWriter(openFileOutput("myFavourite.txt", MODE_APPEND));
// writing the ID of the added word to the file
out.write(mCurrentWord);
// closing the file
out.close();
} catch (java.io.IOException e) {
//doing something if an IOException occurs.
}
Toast toast = Toast.makeText(ContentView.this, R.string.messageWordAddedToFarvourite, Toast.LENGTH_SHORT);
toast.show();
}
});
//Reading lines from myFavourite.txt
btnAddFavourite.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
//trying opening the myFavourite.txt
try {
// opening the file for reading
InputStream instream = openFileInput("myFavourite.txt");
// if file the available for reading
if (instream != null) {
// prepare the file for reading
InputStreamReader inputreader = new InputStreamReader(instream);
BufferedReader buffreader = new BufferedReader(inputreader);
String line;
// reading every line of the file into the line-variable, on line at the time
try {
while ((line = buffreader.readLine()) != null) {
// do something with the settings from the file
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// closing the file again
try {
instream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (java.io.FileNotFoundException e) {
// ding something if the myFavourite.txt does not exits
}
return false;
}});
}
但是,“收藏夹”按钮不适用于上述代码行。
文件 myFavourite.txt 确实退出(在Eclipse中的data / data / my_project /文件中),但它只包含一个最近添加的单词。此外,长按“收藏夹”按钮时,应用程序将强制关闭。
我做错了什么?如果你们能帮助我解决这个问题,我将非常感激。非常感谢你。
======
修改
非常感谢你的帮助。我更新了我的代码以反映您的评论和提示。到目前为止,已有一些改进:收藏的单词已写入文件 myFavourite.txt ,如 word2 word2 word3 ...(虽然我希望它们出现在新线)。
但是,长按“收藏夹”按钮时仍未加载“收藏夹”列表。
事实上,我的目的是可以在应用程序中加载收藏夹列表,并允许用户选择要再次查找的单词。
非常感谢你的帮助。
答案 0 :(得分:1)
在这一行
OutputStreamWriter out = new OutputStreamWriter(openFileOutput("myFavourite.txt",0));
如果文件在每次创建流时都已存在,则会覆盖该文件。你想要做的是传递MODE_APPEND而不是0.看看the documentation。
关于长按,这些行
if (instream) {
和
while (( line = buffreader.readLine())) {
甚至不应该编译。你想要的可能就像
if (instream.ready()) {
和
while ((line = buffreader.readLine()) != null) {
// Use this line
}
答案 1 :(得分:0)
看一下这个在android中读取文本文件很简单的例子。
<强> Example 强>
必须保留文件。
res / raw / myFavourite.txt。
与您的问题相同。 How can I read a text file from the SD card in Android?
另一个简单的教程。如何阅读文本文件。 http://android-er.blogspot.com/2010/07/display-text-file-in-resraw_01.html