为什么我的代码不会打印出txt文件的所有行?

时间:2012-11-20 17:43:26

标签: java

所以,我有这个代码应该从“Questions.txt”读回来并在JTextArea中显示它,并保存任何编辑选项,但它只读回最后一行。这有什么不对吗?

package secondgui;

public class MainGUI {
public static void main (String [] args) {
    SecondGUI phillip = new SecondGUI(); 
    phillip.repaint();

}
}




 package secondgui;

 import java.awt.event.*;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.util.Scanner;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import javax.swing.*;

 public class SecondGUI extends JFrame implements ActionListener {

/**
 * @param args the command line arguments
 */
private JButton save = new JButton("Save Edits");
private JTextArea edit = new JTextArea();

public SecondGUI() {
    this.setVisible(true);
    this.setSize(600, 600);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);

    JPanel panel = new JPanel();
    panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
    this.add(panel);

    JLabel label = new JLabel("Please edit the question(s) below"
            + " as you see fit");

    panel.add(save);

    save.addActionListener(this);


    panel.add(label);
    edit.setLineWrap(true);

    try { 
        Scanner b = new readFile().openFile();
        while (b.hasNextLine()) {
            edit.setText(b.nextLine() + "\n");
        }
    } catch (Exception e) {}

    JScrollPane scrollyBar = new JScrollPane(edit);
    scrollyBar.setBounds(150, 150, 250, 100);
    scrollyBar.setSize(300, 300);

    panel.add(scrollyBar);
    this.repaint();
  }

  @Override
  public void actionPerformed(ActionEvent e) {
    if (e.getSource() == save) {
        PrintWriter out;
        FileWriter outFile;
        try {
            outFile = new FileWriter("Questions.txt");
            out = new PrintWriter(outFile);
            out.println(edit.getText());
            out.close();
            outFile.close();
        } catch (IOException ex) {
            Logger.getLogger(SecondGUI.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

 }
 }

 package secondgui;

import java.io.*;
import java.util.*;


public class readFile {

private Scanner x = new Scanner(System.in);

public Scanner openFile() {
    try {
        x = new Scanner(new File("Questions.txt"));

    } catch (Exception e) {
        System.out.println("Could not find file");

    }
    return x;
}

public void readFile() {
    while (x.hasNext()) {
        x.next();
    }
}

public void closeFile() {
    x.close();
}
}

2 个答案:

答案 0 :(得分:1)

违规行是:edit.setText(b.nextLine() + "\n");您应该追加下一行,而不是设置文本。如果我没记错的话,可以使用edit.append()方法。

有关JTextArea的更多信息,请查看JavaDocs

答案 1 :(得分:0)

无论您的最后一期是什么,我认为您的readfile()机制充其量是值得怀疑的。这样:

 private Scanner x = new Scanner(System.in);
 try {
        x = new Scanner(new File("Questions.txt"));

    } catch (Exception e) {
        System.out.println("Could not find file");
    }
看起来很狡猾。如果遇到错误,扫描程序默认为stdin。这个:

public void readFile() {
    while (x.hasNext()) {
        x.next();
    }
}

似乎只是在没有做任何事情的情况下遍历文件。我会阅读tutorial on reading files,并且(至少暂时)抛出显式异常(如果其中任何一个失败)。