查找java文件中的详细信息

时间:2013-11-03 10:38:19

标签: java file frame

我写了一些代码,通过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);
}
}

3 个答案:

答案 0 :(得分:2)

在actionPerformed(..)方法中移动代码,它应该可以正常工作。

    FileReader fr=new FileReader("student.txt");
BufferedReader br=new BufferedReader(fr);

答案 1 :(得分:0)

当您读取流时,标记当前位置的光标会在读取每个字节时向前移动。 当您初始化流一次时,当您读过一个点时,您将无法再次访问该部分。 (除非你回放流。)
因此,要么每次都在文件上创建一个新的流,要么使用允许跳转的随机访问通道(Bufferedreader.markreset可以实现同样的效果)。


另请注意,您只能在处理器方法中读取一行。要逐行读取文件,请使用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的方法相同。