Javaで1行エディタ

なんだっけな。そうだtwitter発言スクリプト - hogeなlogでエディタは外部のプログラム使ってたんだけど、twitter用の1行テキスト書くのにでっけえ画面のエディタ開いて、書いて、保存して、終了するっていうのがめんどくさかったからJavaで1行だけのテキストエディタもどきを書きました。ということです。超絶書き捨てプログラム。Enterで保存して終了、普通に終了すると保存しない。「保存しますか?」などと聞いてくる親切さは皆無。twitter投稿スクリプト用に使うことしか考えてない。中身ある既存ファイル開いても問答無用で上書きします。

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

public class OneLineEditor extends JFrame{
  private static final String title = "OneLineEditor";
  private String filepath;
  private JTextField field;
  private File file;
  private FileWriter writer;
  public OneLineEditor(String _filepath) {
    super(title);

    filepath = _filepath;
    try {
      writer = new FileWriter(new File(filepath));
    }
    catch(IOException ex) {
      System.err.printf("cannot open %s", filepath);
      System.exit(1);
    }
    field = new JTextField(50);
    field.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent ev) {
        save(field.getText());
        System.exit(0);
      }
    });
    field.getDocument().addDocumentListener(new DocumentListener() {
      public void changedUpdate(DocumentEvent ev) {
        edit(field.getText());
      }
      public void insertUpdate(DocumentEvent ev) {
        edit(field.getText());
      }
      public void removeUpdate(DocumentEvent ev) {
        edit(field.getText());
      }
    });
    getContentPane().add(field);

    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent ev) {
        System.exit(0);
      }
    });

    pack();
    setVisible(true);
  }
  private void save(String text) {
    try {
      writer.write(text, 0, text.length());
      writer.close();
    }
    catch(IOException ex) {
      System.err.printf("cannot write to %s", filepath);
      System.exit(1);
    }
  }
  private void edit(String text) {
    setTitle((new Formatter()).format("%s %d", title, text.length()).toString());
  }
  public static void main(String[] args) {
    if(args.length>0) {
      OneLineEditor editor = new OneLineEditor(args[0]);
    }
  }
}

test