1

テキスト領域の内容をファイルに書き込むための単純な Java GUI プログラムを作成しました。

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

public class Convert {
    public static void main(String[] args) {
        new MyFrame();
    }
}


class MyFrame extends JFrame{
    JPanel panel = new JPanel();
    JButton button = new JButton("Convert");
    JTextArea textArea = new JTextArea(500, 400);
    String fileName = "result.txt";

    MyFrame() {
        super("converter");
        setVisible(true);
        setBounds(100, 100, 500, 500);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.add(panel);
        panel.setLayout(null);

        panel.add(button);
        button.setLocation(0, 0);
        button.setSize(this.getBounds().width, 100);

        panel.add(textArea);
        textArea.setEditable(true);
        textArea.setLocation(0, 100);
        textArea.setSize(this.getBounds().width, this.getBounds().height - 100);

        button.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent event) {

                try {
                    File file = new File(fileName);
                    if (!file.exists()) {
                        file.createNewFile();
                    }

                    FileWriter fw = new FileWriter(file);
                    BufferedWriter bw = new BufferedWriter(fw);

                    String text = textArea.getText();
                    textArea.setText("");
                    Scanner scanner = new Scanner(text);

                    while (scanner.hasNextLine()) {

                        String line = scanner.nextLine();
                        byte[] utf8 = line.getBytes("UTF-8");
                        line = new String(utf8, "UTF-8");

                        bw.write(line);
                        System.out.println(line);
                    }

                }

                catch (Exception e) {
                    System.out.print(e.getMessage());
                }

            }
        });
    }
}

入力ソースは utf-8 (漢字) であり、正しく印刷できることに注意してください。ただし、result.txt ファイルは空です。bw.write("asdf") を試しても、まだ空です。

4

2 に答える 2

3

BufferedWriter を閉じていません。それを閉じると、ライターがフラッシュされて閉じられ、ファイルの内容が表示されます。以下を追加する必要があります。

bw.close();

そして、ここに close() を置く必要がある場所があります:

                while (scanner.hasNextLine()) {

                    String line = scanner.nextLine();
                    byte[] utf8 = line.getBytes("UTF-8");
                    line = new String(utf8, "UTF-8");

                    bw.write(line);
                    System.out.println(line);
                }
                // close the buffered
                bw.close();

注:理想的には、finally ブロックに配置する方が理にかなっています。

  try {
                File file = new File(fileName);
                if (!file.exists()) {
                    file.createNewFile();
                }

                FileWriter fw = new FileWriter(file);
                BufferedWriter bw = new BufferedWriter(fw);

                String text = textArea.getText();
                textArea.setText("");
                Scanner scanner = new Scanner(text);

                while (scanner.hasNextLine()) {

                    String line = scanner.nextLine();
                    byte[] utf8 = line.getBytes("UTF-8");
                    line = new String(utf8, "UTF-8");

                    bw.write(line);
                    System.out.println(line);
                }

            }

            catch (Exception e) {
                System.out.print(e.getMessage());
            } finally {
                try {
                    bw.close();
               } catch (Exception e) {
                System.out.print("Exception while closing the bw");
               }
            }
于 2013-08-11T05:01:23.367 に答える
2

FileWriter、またはあなたの場合はバッファリングされたライターを閉じていることを確認する必要があります。だからあなたがしなければならないのは

bw.write(line);
System.out.println(line);
bw.close();

これにより、開いているバッファが閉じられ、バッファ内にあるものを作成中のファイルに書き込むことができます。

お役に立てれば!

于 2013-08-11T05:03:07.833 に答える