【问题标题】:Having line by line words in a text file在文本文件中逐行包含单词
【发布时间】:2014-07-15 04:14:30
【问题描述】:
JButton btnExport = new JButton("Export");
        btnExport.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {     

                JFileChooser saver = new JFileChooser("");      
                int returnVal = saver.showSaveDialog(null);
                File file = saver.getSelectedFile();   
                 BufferedWriter writer = null; 
                if (returnVal == JFileChooser.APPROVE_OPTION) 
                 {  
                    try  
                    {  

                    writer = new BufferedWriter( new FileWriter( file.getAbsolutePath().toString() + "\n")); 
                    writer.write( jTextArea1.getText());         
                    writer.newLine();
                    writer.flush();
                    writer.close( );  
                    JOptionPane.showMessageDialog(null, "The Text was Saved Successfully!",  
                                "Success!", JOptionPane.INFORMATION_MESSAGE);  
                    }  
                    catch (Exception e)  
                    {  
                    JOptionPane.showMessageDialog(null, "The Text could not be Saved!",  
                                "Error!", JOptionPane.INFORMATION_MESSAGE);  
                    }  
                }   
        }});   

我已经尝试了几个代码,但是当我逐行输入 textarea 并尝试将其保存在文本文件中时,它仍然是一行。谁能帮我?我希望文本在我的文本文件中逐行显示。谢谢

【问题讨论】:

  • 尝试使用JTextArea#write。不要忘记,如果您启用了换行/自动换行,这并不构成文件中的新行
  • 我还是新手。我将如何禁用换行或自动换行。嗯似乎令人困惑,因为我要将它们保存在单个文本文件中
  • 如何在文本区域输入文本?你在用回车键写新行吗?
  • 是的,我键入文本文件,然后,当我单击一个按钮时,我可以将文本区域的输入保存到文本文件(行格式的行)。文本区域也是如此..

标签: java swing user-interface jfilechooser filewriter


【解决方案1】:

我没试过,但我会先看看:

jTextArea1.write(writer);

根据此处的 javadocs 提供所需的文件输出:

http://docs.oracle.com/javase/7/docs/api/javax/swing/text/JTextComponent.html#write(java.io.Writer)

如果 that 没有正确使用与 JTextArea 相同的换行符,那么您可以使用蛮力方法并一次循环遍历控件中的行,如下所示:

String text = jTextArea.getText();
for( int i=0; i < jTextArea.getLineCount(); ++i) {
    int start = jTextArea.getLineStartOffset(i);
    int end = jTextArea.getLineEndOffset(i);
    String line = text.substring(start, end);
    writer.write(line);
    writer.newLine();
}

编辑:

我刚刚对此进行了测试以确认,两种方法都会产生相同的换行位置(因此简洁的jTextArea1.write(writer) 自然更可取)。请注意,这两种方法都会忽略自动插入的换行位置,并且仅将回车保存到在文本输入期间使用回车键的写入文件中。

如果出于某些不寻常的原因,需要在输出文件中实际保存换行的位置,则需要使用 LineBreakMeasurer 类根据 JTextArea 的宽度测量文本的宽度。官方教程可以在这里找到http://docs.oracle.com/javase/tutorial/2d/text/drawmulstring.html

但是,请注意,如果您这样做,您将在保存的文件中插入硬换行符,原来只有软换行,因此将保存的数据加载回 JTextArea 将不会完全重现原始输入。

【讨论】:

    【解决方案2】:

    而不是 FileWriter 使用 OutputStreamWriter,您的问题将作为 OutputStreamWriter consdiers '\n' while streaming。

    FileOutputStream fos = new FileOutputStream(new File("path"));
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));
    

    【讨论】:

    • 哇,感谢您的帮助。我会试试这个并在 OutputStreamWriter 上搜索,我应该阅读更多内容。
    【解决方案3】:

    您可以使用 FileWriter 将字符串写入文件。 下面的代码工作正常。

    package areaText;
    
    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JTextArea;
    
    public class TextAreaTest extends JFrame{
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            new TextAreaTest().createFrame();
    
        }
    
        private void createFrame() {
            setSize(200,200);
            setLayout(null);
            final JTextArea area=new JTextArea("Test");
            area.setSize(50, 50);
            area.setBounds(0, 0, 100, 100);
            add(area);
    
            JButton  button=new JButton("Save");
            button.setBounds(100, 100, 80, 30);
            add(button);
            setVisible(true);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
    
            button.addActionListener(new ActionListener() {
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    String s=area.getText();
                    System.out.println("GOT-"+s);
                    try {
                        File f=new File("testFile.txt");
                        System.out.println("Writing "+f.getAbsolutePath());
                        FileWriter fr=new FileWriter(f);
                        fr.write(s);
                        fr.close();
                    } catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }               
                }
            });
        }
    
    }
    

    【讨论】:

    • 非常不鼓励使用空布局,尤其是对于新手/缺乏经验的开发人员
    • 我只是为了解决将文本区域内容写入文本文件的问题而创建的,这里我不解释布局。而且,我不是 Swing 程序员
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多