我写了一些代码,通过GUI框架从文件中查找学生详细信息:
我知道readLine()函数会读取下一行,但是每当我按下搜索按钮时,我都希望它从头开始。我怎么能这样做?
到目前为止,我的代码如下。
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
class search extends Frame implements ActionListener
{
Label lname,lresult;
TextField name;
TextArea result;
Button search,exit;
char ar;
String lines;
int n;
FileReader fr=new FileReader("student.txt");
BufferedReader br=new BufferedReader(fr);
public search() throws Exception
{
setTitle("student details");
setLayout(new FlowLayout());
lname=new Label("name :");
lresult=new Label();
name= new TextField(20);
result= new TextArea(50,50);
search=new Button("search");
exit= new Button("exit");
add(lname);
add(name);
add(search);
add(exit);
add(lresult);
add(result);
search.addActionListener(this);
exit.addActionListener(this);
setVisible(true);
}
public void actionPerformed(ActionEvent ae)
{
try
{
lines=br.readLine();
if(ae.getSource()==search)
{
n=lines.indexOf(name.getText());
if(n>-1)
{
lresult.setText(" name found");
result.setText(lines);
}
else
{
lresult.setText("not found");
result.setText("not found");
}
}
}
catch(Exception e)
{
}
if(ae.getSource()==exit)
{
search.this.dispose();
}
}
public static void main(String s[]) throws Exception
{
search se= new search();
se.setSize(400,200);
se.setVisible(true);
}
}
答案 0 :(得分:2)
在actionPerformed(..)方法中移动代码,它应该可以正常工作。
FileReader fr=new FileReader("student.txt");
BufferedReader br=new BufferedReader(fr);
答案 1 :(得分:0)
当您读取流时,标记当前位置的光标会在读取每个字节时向前移动。
当您初始化流一次时,当您读过一个点时,您将无法再次访问该部分。 (除非你回放流。)
因此,要么每次都在文件上创建一个新的流,要么使用允许跳转的随机访问通道(Bufferedreader.mark
和reset
可以实现同样的效果)。
另请注意,您只能在处理器方法中读取一行。要逐行读取文件,请使用while循环:
String currentLine = "";
while((currentLine = br.readLine()) != null) {
//do the funky stuff
}
答案 2 :(得分:0)
您可以使用RandomAccessFile
重置阅读器的位置:
RandomAccessFile raf = new RandomAccessFile("student.txt", "rw");
public void actionPerformed (ActionEvent ae) {
// Resets to the beginning of file
raf.seek(0);
// rest of the method
}
其方法readLine()
的使用方式与BufferedReader
的方法相同。