【问题标题】:Reading mutiple lines from a file in a Java GUI在 Java GUI 中从文件中读取多行
【发布时间】:2018-03-26 15:22:20
【问题描述】:

我是一名学生,当我将我的程序输入到具有我的 GUI 的程序中时,我无法让我的程序读取文本文件中的所有行,它只会显示最后一行。我让它在控制台上运行,它运行良好并显示每一行。有人可以帮忙吗?

这是在控制台中工作的代码

    String parent = "D:\\Online Class\\Java Programs\\Final Project\\Tests\\";
    Scanner fileInput = new Scanner(System.in);

    System.out.print("Enter Name of File: ");
    String name= fileInput.nextLine();
    String extension = ".txt";
    String fileName = (parent+name+extension);

    //reads file and displays it
    String line = null;

    try{
        FileReader fileReader = new FileReader(fileName);

        BufferedReader bufferedReader = new BufferedReader(fileReader);

        while((line = bufferedReader.readLine()) !=null)
        {
            System.out.println(line);
        }
        bufferedReader.close();
    }

    catch(FileNotFoundException ex)
    {
        System.out.println("Unable to open file '" + fileName + "'");
    }
    catch(IOException ex)
    {
        System.out.println("Error Reading file '"+fileName + "'");
    }
}

这是当我使用 GUI 将其输入程序时不起作用的代码

//search for file (must be in same folder as program)
    String parent = "D:\\Online Class\\Java Programs\\Final Project\\Tests\\";
    String fileInput = taskNameTextField.getText();
    String name = fileInput;
    String extension = ".txt";

    String fileName = (parent+name+extension);

    //reads file and displays it
    String line = null;

    try{
        FileReader fileReader = new FileReader(fileName);

        BufferedReader bufferedReader = new BufferedReader(fileReader);

        while((line = bufferedReader.readLine()) !=null)
        {
            System.out.println(line);
        }
        bufferedReader.close();
    }

    catch(FileNotFoundException ex)
    {
        System.out.println("Unable to open file '" + fileName + "'");
    }
    catch(IOException ex)
    {
        System.out.println("Error Reading file '"+fileName + "'");
    }
}

这是正在运行的 GUI 的完整代码:

import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
import javax.swing.*;
import java.io.PrintWriter;
import java.io.IOException;
import java.io.File;
import java.io.*;
import java.util.Scanner;

public class readGUItest implements ActionListener
{

    JFrame window = new JFrame("Task");
    JTextField taskNameTextField = new JTextField();
    JTextArea DescriptTextArea = new JTextArea();
    JLabel taskNameLabel = new JLabel("Task Name");
    JLabel descriptLable = new JLabel("Description");
    JButton save = new JButton("save");



    public static void main(String[] args)throws IOException
    {
        readGUItest tGt = new readGUItest();
    }

    public readGUItest()
    {

        window.add(taskNameLabel);
        window.add(taskNameTextField);
        window.add(descriptLable);
        window.add(DescriptTextArea);
        window.add(save);
        save.addActionListener(this);

        window.setSize(new Dimension(200,300));
        window.setLayout(new GridLayout(3,3));
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setVisible(true);
    }



    public void actionPerformed(ActionEvent event)
    {
        //search for file (must be in same folder as program)
        String parent = "D:\\Online Class\\Java Programs\\Final Project\\Tests\\";
        String fileInput = taskNameTextField.getText();
        String name = fileInput;
        String extension = ".txt";

        String fileName = (parent+name+extension);

        String line = null;

        try{
            FileReader fileReader = new FileReader(fileName);

            BufferedReader bufferedReader = new BufferedReader(fileReader);

            while((line = bufferedReader.readLine()) !=null)
            {
                DescriptTextArea.setText(line);
            }
            bufferedReader.close();
        }

        catch(FileNotFoundException ex)
        {
            DescriptTextArea.setText("Unable to open file '" + fileName + "'");
        }
        catch(IOException ex)
        {
            DescriptTextArea.setText("Error Reading file '"+fileName + "'");
        }
    }

}

【问题讨论】:

  • 我没有看到任何 GUI 代码。如果您使用的是 JTextField,您可能会不小心将文本替换为代码读取的最后一个内容。在 GUI 组件中附加文本的最简单方法是将当前文本保存到缓冲区(例如String 对象),然后将新文本附加到该缓冲区,然后用缓冲区替换组件中的文本。
  • 能否请您发布完整的代码?从目前的情况来看,无法解释您所描述的行为。
  • 对 GUI 来说是的(起作用的那个):
  • 已添加到问题中

标签: java swing user-interface bufferedreader filereader


【解决方案1】:

您在DescriptTextArea 上使用setText,它会替换小部件之前的内容。

您可以像这样使用JTextField 的文档:

DescriptTextArea.getDocument().insertString(
    DescriptTextArea.getDocument().getEndPosition().getOffset(),
    line + System.getProperty("line.separator"), 
    null);

这会在文档末尾插入新行并附加行分隔符。

【讨论】:

  • 非常感谢! :-)
【解决方案2】:

JTextArea 有一个默认读取纯文本文件的方法,这应该适合你

Reader fileReader = new FileReader(fileName);
DescriptTextArea.read(fileReader, fileName);

http://www.java2s.com/Code/JavaAPI/javax.swing/JTextAreareadReaderinObjectdesc.htm

https://docs.oracle.com/javase/7/docs/api/javax/swing/text/JTextComponent.html#read(java.io.Reader,%20java.lang.Object)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 1970-01-01
    相关资源
    最近更新 更多