我有一个这样的txt文本。

我想尝试做一个背英语单词的软件。我java才刚学到面向对象。试了很久,才只是将文件导入进去。所以希望
有人试着帮帮忙,我想参考一下。以下是我读取文件的代码,还是可以运行的。但我不知道怎么连接上我想要的功能。
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class GetEnglishWord {
public static void main(String[] args) {
File f = new File("C:/Users/lenovo/Desktop/english4.txt");
System.out.println(f.length());
Scanner s;
try {
s = new Scanner(f);
System.out.println(f.getName());
System.out.println(s.hasNextLine());
while(s.hasNextLine()){
String line = s.nextLine();
System.out.println(line);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
我想实现的功能是,一次出现一行,点下一个,出现下一行,点上一个出现上一个记录,点加入错题本,就将那一行copy到一个新的txt文件里面。
怨我,还没学会爬,就想跑了。我觉得应该不难,但我一点思路也没有,前后根本连接不上,我就想试一试,希望有人帮忙。
谢谢大伙。
------解决思路----------------------
这应该是要用到数据结构,我来说下我的思路:
1. 先定义双向链表,大概如下:
// 单行单词的节点信息
public class WordNode {
private String curWord;// 记录当前行单词信息
private WordNode preWord = null;// 记录前一行信息
private WordNode nextWord = null;// 记录下一行信息
// 构造方法
public WordNode(String curWord) {
this.curWord = curWord;
}
public String getCurWord() {
return curWord;
}
public void setCurWord(String curWord) {
this.curWord = curWord;
}
public WordNode getPreWord() {
return preWord;
}
public void setPreWord(WordNode preWord) {
this.preWord = preWord;
}
public WordNode getNextWord() {
return nextWord;
}
public void setNextWord(WordNode nextWord) {
this.nextWord = nextWord;
}
}
2.在你读取一行初始化当前行时,把前一行与当前行的关系建立起来,大致思路:
public static void main(String[] args) {
File f = new File("C:/Users/lenovo/Desktop/english4.txt");
System.out.println(f.length());
Scanner s;
WordNode curNode = null;// 记录当前行
WordNode preNode = null;// 记录前一行
try {
s = new Scanner(f);
System.out.println(f.getName());
System.out.println(s.hasNextLine());
while (s.hasNextLine()) {
String line = s.nextLine();
// 初始化当前节点
curNode = new WordNode(line);
// 若前一节点非空,建立关系
if(null != preNode){
preNode.setNextWord(curNode);
curNode.setPreWord(preNode);
//
preNode = curNode;
}
System.out.println(line);
}
// 最后一个节点为curNode,可以通过curNode获取所有的节点
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
3. 至于你要的界面,参考swing慢慢写吧
这个方法有一定缺陷:当单词文本内容太大的时候,就会内存溢出。LZ可以考虑限制读取行数,比如一次只读1000行,可以调整WordNode的结构,增加个int lineNum,来记录当前单词在文本中的行数,下次可以直接从这行开始读。
自己思考怎么实现吧!