当前位置: 首页 > 知识库问答 >
问题:

SwingJavatxt文件写入JTextArea

冯流觞
2023-03-14

有没有办法让文件末尾的空值消失?我决定在当循环之前追加第一行,这样它就不会受到\n的影响,但是这样做会出现空值...(没有第一个追加,它只是跳过第一行,开始在第二行打印)

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;
import java.io.*;

public class notepadMinus implements ActionListener{
    //Properties
    JFrame theFrame;
    JPanel thePanel;
    JMenuBar theBar;
    JMenu theMenu;
    JMenuItem openItem;
    JMenuItem saveItem;
    JTextArea theArea;
    JScrollPane theScroll;
    JFileChooser openChoose;
    String strLine;
    //Methods
    public void actionPerformed(ActionEvent evt){
        if(evt.getSource() == openItem){
            System.out.println("Open File");
            int intResult = openChoose.showOpenDialog(openItem);
            if(intResult == JFileChooser.APPROVE_OPTION){
                System.out.println("File selected");
                File selectedFile = openChoose.getSelectedFile();
                theArea.selectAll();
                theArea.replaceSelection("");
                try{
                    BufferedReader txtfile = new BufferedReader(new FileReader(openChoose.getSelectedFile()));
                    strLine = txtfile.readLine();
                    theArea.append(strLine);
                    while(strLine != null){
                        strLine = txtfile.readLine();
                        theArea.append( "\n" +  strLine);   
                    }
                    txtfile.close();
                }catch(FileNotFoundException e){
                    System.out.println("File Not Found");
                }catch(IOException e){
                    System.out.println("Reading Error");
                }   
                //read lines
                //put those lines in theArea - append
                //System.out.println(openChoose.getSelectedFile());
            }else{
                System.out.println("Cancelled?");
            }
        }
    }
    //Constructor
    notepadMinus(){
        theFrame = new JFrame("Notepad Minus");
        theFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        thePanel = new JPanel();
        thePanel.setLayout(null);
        thePanel.setPreferredSize(new Dimension(800, 600));
        
        theBar = new JMenuBar();
        //theBar.setSize(600,50);
        //theBar.setLocation(100, 50);
        //thePanel.add(theBar);
        theFrame.setJMenuBar(theBar);
        
        theMenu = new JMenu("File");
        theBar.add(theMenu);
        
        openItem = new JMenuItem("Open");
        openItem.addActionListener(this);
        theMenu.add(openItem);
        
        saveItem = new JMenuItem("Save");
        saveItem.addActionListener(this);
        theMenu.add(saveItem);
        
        theArea = new JTextArea();
        theScroll = new JScrollPane(theArea);
        theScroll.setPreferredSize(new Dimension(800, 600));
        
        //theFrame.setContentPane(thePanel);
        theFrame.setContentPane(theScroll);
        theFrame.pack();
        theFrame.setVisible(true);
        
        openChoose = new JFileChooser();
        
    }
    //Main Method
    public static void main(String[] args){
        new notepadMinus();
    }
}

它在JTextArea中的外观

hello world
hello world
hello world
hello world
null

共有1个答案

韦泳
2023-03-14

改变

theArea.append(strLine);
while(strLine != null){
    strLine = txtfile.readLine();
    theArea.append( "\n" +  strLine);   
}

while(strLine != null){
    theArea.append( "\n" +  strLine);   
    strLine = txtfile.readLine();
}

如果在打印前读取,您将跳过空值检查。
您已经在循环之前读取了txtfile中的一行。您应该在读取另一行之前先打印它。
这个错误还有另一个后果——第一行被跳过。如果您的文件有

a
b
c
d

作为其内容,输出将是

b
c
d
null
 类似资料:
  • 问题内容: 如何将一小段文字写入文件?我已经使用Google搜索了3-4多个小时,但无法找到具体方法。 有很多论据,我不知道该如何使用。 当您只想在文件中写一个名字和几个数字时,最容易使用的功能是什么? 编辑:添加了一段我的代码。 问题答案:

  • Go将数据写入文件的方法和上面介绍过的读取文件的方法很类似。 package main import ( "bufio" "fmt" "io/ioutil" "os" ) func check(e error) { if e != nil { panic(e) } } func main() { // 首先看一下如何将一个字符

  • 通过FileEntry的createWriter方法可以获取FileWriter对象,通过FileWriter可以对文件进行写操作: fileEntry.createWriter(function(fileWriter) { //We'll do something with fileWriter later }, errorHandler); 对于FileEntry,可以通过Entry

  • 相应的,文件读取有了,自然有文件写入类,使用方式与FileReader也类似: FileWriter writer = new FileWriter("test.properties"); writer.write("test"); 写入文件分为追加模式和覆盖模式两类,追加模式可以用append方法,覆盖模式可以用write方法,同时也提供了一个write方法,第二个参数是可选覆盖模式。 同样,

  • 问题内容: 我将如何将javafx.scene.image.Image图像写入文件。我知道您可以在BufferedImages上使用ImageIO,但是有什么方法可以使用javafx图像吗? 问题答案: 差不多3年后,我现在有知识去做并回答这个问题。是的,原始答案也是有效的,但它涉及到先将图像转换为BufferedImage,我理想上想完全避免摆动。虽然这确实会输出图像的原始RGBA版本,足以满足

  • 问题内容: 我必须从用户那里获取用户的名称和地址,并将其放入文本文件中。我写以下代码: 当我运行代码时,它需要用户输入,但文本文件为空。地址和名称未写入文本文件。如何在上面的代码中将名称和地址存储到文本文件中。 问题答案: 您创建的,但从来没有或它。 这些操作是实际写入文件的操作 正如@ManoDestra在注释中指出的那样,Java支持statement,它允许您将语句的格式设置为: 由于实现了