【问题标题】:Loading a text file into a textarea将文本文件加载到文本区域
【发布时间】:2011-08-18 07:41:10
【问题描述】:

首先,我在java方面非常基础。我正在尝试浏览 .txt 文件并将其内容加载到文本区域中。我已经完成了从 JFileChooser 收到文件的部分,现在我不知道如何做剩下的。

.
.
.

File selFile = new File(fileChooser.getSelectedfile());
/// From here I want to load its content to a textarea "txtArea"

【问题讨论】:

  • 此页面上的每条建议都会得到 -1。所有文本组件都有一个 read(...) 方法。没有理由创建循环代码或缓冲区或任何东西。它的一行代码填充文本区域。是的,这里的解决方案适用于只读文件,但如果您想将文本区域中的文本写到文件中,它们将不起作用。每个人都在强制换行符为“\n”。 read 方法将在读取文件时跟踪换行符字符串,然后在写入文件时将其用于输出。
  • @camickr:TextArea 类或其任何后代中没有 read() 方法。换行符也需要是 '\n' 因为这是这些类内部使用的。我建议您在开始对每个人的答案进行闪电战之前收回您的反对票并弄清楚您的事实。
  • 这是一个与 Swing 相关的问题,因为发布者使用的是 JFileChooser。所有 Swing 文本组件都支持从 JTextComponent 继承的 read() 方法。 read() 方法在从文件中读取文本时对其进行解析,并将“\n”插入到文档中。但是,它也会跟踪在文件中找到的实际换行字符串,以便在您需要重写文件时可以使用该字符串。所以它将保留正确的新行字符串。请参阅:tips4java.wordpress.com/2009/02/07/text-and-new-lines 简要讨论此问题。
  • @camickr,SO 并非旨在将答案隐藏在 cmets 中。如果您认为其他答案不正确,并且您在上面描述的是要走的路,那么请将您的建议转化为实际答案。

标签: java file-io


【解决方案1】:
BufferedReader in = null;
try {
    in = new BufferedReader(new FileReader(selFile));
    String str;
    while ((str = in.readLine()) != null) {
        jtextArea.append(str);
    }
} catch (IOException e) {
} finally {
    try { in.close(); } catch (Exception ex) { }
}

【讨论】:

  • 可能想要将 in.close() 移动到 finally 块。
  • 不保持缩进和换行。
  • @Qwerky,我尝试将 in.close() 移动到 finally 块。但它给出了错误提示找不到符号in
  • @mrN 因为在try 块中声明了in。将 tryin.close 之前的声明移动到 finally 中。但是不要忘记在关闭之前检查它是否是null
  • @hage,我会尝试这样做,但是换行和缩进呢。
【解决方案2】:

使用BufferedReader 逐行读取 .txt 文件。然后,您可以将每一行附加到您的文本区域。

【讨论】:

    【解决方案3】:

    使用所有 Swing 文本组件都支持的 read(...) 和 write(...) 方法。简单例子:

    import java.awt.*;
    import java.awt.event.*;
    import java.io.*;
    import javax.swing.*;
    import javax.swing.text.*;
    
    class TextAreaLoad
    {
        public static void main(String a[])
        {
            final JTextArea edit = new JTextArea(10, 60);
            edit.setText("one\ntwo\nthree");
            edit.append("\nfour\nfive");
    
            JButton read = new JButton("Read TextAreaLoad.txt");
            read.addActionListener( new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    try
                    {
                        FileReader reader = new FileReader( "TextAreaLoad.txt" );
                        BufferedReader br = new BufferedReader(reader);
                        edit.read( br, null );
                        br.close();
                        edit.requestFocus();
                    }
                    catch(Exception e2) { System.out.println(e2); }
                }
            });
    
            JButton write = new JButton("Write TextAreaLoad.txt");
            write.addActionListener( new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    try
                    {
                        FileWriter writer = new FileWriter( "TextAreaLoad.txt" );
                        BufferedWriter bw = new BufferedWriter( writer );
                        edit.write( bw );
                        bw.close();
                        edit.setText("");
                        edit.requestFocus();
                    }
                    catch(Exception e2) {}
                }
            });
    
            JFrame frame = new JFrame("TextArea Load");
            frame.getContentPane().add( new JScrollPane(edit), BorderLayout.NORTH );
            frame.getContentPane().add(read, BorderLayout.WEST);
            frame.getContentPane().add(write, BorderLayout.EAST);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.pack();
            frame.setLocationRelativeTo( null );
            frame.setVisible(true);
        }
    }
    

    【讨论】:

      【解决方案4】:

      对于缩进和换行,您必须在附加到文本区域之前使用“\n”..

        BufferedReader buff = null;
        try {
             buff = new BufferedReader(new FileReader(selFile));
             String str;
             while ((str = buff.readLine()) != null) {
             jtextArea.append("\n"+str);
         }
       } catch (IOException e) {
        } finally {
          try { in.close(); } catch (Exception ex) { }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-25
        • 1970-01-01
        相关资源
        最近更新 更多