0

編集可能なCSVをスプレッドシート形式で表示するプログラムを作成し、LDAPソースからそのスプレッドシートに情報をプルして追加して保存することになっています。すぐに処理するのは大変なので、一度に小さな塊で処理します。

LDAPビットについてはまだ気にしないでください。今のところ、[ロード]>[編集]>[保存]ビットを機能させたいだけです。

最初に.TXTファイルを開いて表示し、保存してみると、後で.CSV部分を実装するときに、学んだことを簡単に転送できると思います。しかし、保存部分を正しく機能させるのに苦労しており(読む:まったく)、ここの他の投稿を読むことで少し助けを得たので、私は尋ねると思いました。

注:Oracle Java tute for JFileChooserは、実際の機能ではなく、実装の開始方法にほとんど触れないことを除いて、保存については説明していません。

私のコードへのリンク:http: //pastebin.com/tWnYrwgM

私が現在最も助けを必要としているコード:

private void SaveActionPerformed(java.awt.event.ActionEvent evt) {                                    
//TODO
}

そこにコードがあったときにプロジェクトをビルド、実行、またはデバッグしたときに実際に機能するものがなかったため、現在そこには何もありません。

私が言おうとしているのは、ファイルへの書き込みに問題があるということだと思います。

4

1 に答える 1

0

さて、これはあなたがする必要があることのサンプル実装でしょう。これは基本的な状況では機能しますが、十分ではないことに注意してください。確立されたCSVライブラリを使用すると、これは教育目的のためだけに、はるかに効果的です。

JTable myTable; 
public void actionPerformed(ActionEvent e) {
    try {
        TableModel model = myTable.getModel(); // the table model contains all the data. Read its JavaDoc API it is enlightend when you work with JTables and you can do lots of neat stuff with it.
        JFileChooser fc = new JFileChooser();
        if(fc.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) { // no save when the user canceled.
            File target = fc.getSelectedFile();
            FileWriter fWri = new FileWriter(target); // this will create the file, but not any parent directories that might not exist. If there are parent directories that don't exist, this line will throw a FileNotFoundException.
            for(int ii = 0; ii < model.getRowCount(); ii++) {
                StringBuilder lineValue = new StringBuilder();
                for(int jj = 0; ii < model.getColumnCount(); jj++) {
                    lineValue.append(model.getValueAt(ii, jj));
                    lineValue.append(",");
                }
                lineValue.substring(0, lineValue.length() -1); // cut away the last ,
                fWri.write(lineValue + "\r\n"); // the RFC suggests CRLF, but don't be surprised when you get a CSV from somewhere that has only LF or something. Its because of lines like this that you want a library handle it for you.
            }
            fWri.flush();// in fact, this and the next line should go to a 'finally' block. Read about correct and clean file writing to learn more.
            fWri.close();
        }
    } catch (IOException ioex) {
         // file not found, cant be written to, etc. You handle it here.
    }
}
于 2012-07-25T16:42:43.840 に答える