从文件中连续读取并执行操作

时间:2012-06-14 17:23:58

标签: java user-interface file-io

我想连续读取文本文件,并在读取某行时更改我在画布上显示的框的颜色(文本文件将不断更新)。现在,我在画布上绘制了一个绿色方块,文本文件中有三条“测试”线,当它到达文本文件的第三行时,我想将方块更改为红色。

这是我的代码,来自两个文件(myCanvas.java和myFileReader.java)。非常感谢正确方向的任何一点。

public class myCanvas extends Canvas{

    public myCanvas(){
    }

    public void paint(Graphics graphics){
        graphics.setColor(Color.green);
        graphics.fillRect(10, 10, 100, 100);
        graphics.drawRect(10,10,100,100);
    }

    public static void main(String[] args){
        myCanvas canvas = new myCanvas();
        JFrame frame = new JFrame("Live GUI");
        frame.setSize(400, 400);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(canvas);
        frame.setVisible(true);
        myFileReader read = new myFileReader();
        read.readFromFile();
        if(myFileReader.strLine == "This is the third line."){
        //change color
        }

}



public class myFileReader{
    public static String strLine;

public void readFromFile() 
{
    try{
        FileInputStream fstream = new FileInputStream(System.getProperty("user.dir")+"\\sample.txt");
        DataInputStream in = new DataInputStream(fstream);
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        while (true){
            strLine = br.readLine();
            if(strLine == null) {
                Thread.sleep(1000);
            }
        }
        }
    catch (Exception ex){
        System.err.println("Error: " + ex.getMessage());
    }
    }
}

3 个答案:

答案 0 :(得分:0)

只需添加一个计数器,并在每次读取一行时递增。当计数器到达第三行时,使用if语句执行任务

答案 1 :(得分:0)

试试这个

1.Use BreakIterator class, with its static method getLineInstance(), 
  this will help you identify every line in the file.

2. Create an HashMap with the colour as Key, and its RGB as Value.

3. Parse every word in the line, which is obtained from
   BreakIterator.getLineInstance().

4. Compare it with the Key in the HashMap, 
   if the word in the line happens to match the Key in
   the HashMap, then colour the box with the Value of the Key.

答案 2 :(得分:0)

这是一种可以在不对代码进行太多更改的情况下执行此操作的方法。

  1. 在类型为MyCanvas的名为currentColor的{​​{1}}类中创建一个局部变量。仅供参考,Java中的约定是让类名以大写字母开头。
  2. 更新您的Color方法,将矩形的颜色设置为新变量paint(),而不是静态绿色值。
  3. 在您的主要方法中,您可以currentColor然后canvas.currentColor = <new color here>;canvas.repaint()函数调用将删除画布并使用repaint()函数重绘它。
  4. 我认为你的paint()不会适用于经常被修改的文件。