java - 在文本文件中逐行单词

标签 java swing user-interface jfilechooser filewriter

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);  
                    }  
                }   
        }});   

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

最佳答案

我还没有尝试过,但我会先看看是否:

jTextArea1.write(writer);

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

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 的宽度测量文本的宽度。类(class)。官方教程可以在这里找到 http://docs.oracle.com/javase/tutorial/2d/text/drawmulstring.html

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

关于java - 在文本文件中逐行单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23869267/

相关文章:

java - 清除检查点位置后 Spark 结构化流消耗的旧 Kafka 偏移量

java - 图像无法正确显示

java - 如何在主 JFrame 后面打开 JFrame

java - 使 JButton 看起来像有输入焦点

java - JOptionPane 如何改变标题框的颜色

python - PyQT相当于wx CallAfter?

c# - 在 form.show 之后让主线程在按下按钮时执行代码

java - .text 不会打印任何内容,但 .append 会打印任何内容

java - 如何停止下一个线程在 ScheduledThreadPoolExecutor 中运行

react-native - 如何在 React Native 中将键盘颜色更改为 android 的深色模式?