9

javaでバッファ付きライターを使用してcsvファイルを書いています。私のデータは正しく書かれていますが、データが来る別の列が必要です.現在、日付の各インスタンスを1行に書き込んでいますが、列で区切られていません.

コードは

  DateFormat df = new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss");  
        File file = new File( dirName + "\\"+ df.format(new Date()) +"_Statistics.csv");  
        if ( !file.exists() )
            file.createNewFile();

        FileWriter fw = new FileWriter(file);
        writer = new BufferedWriter( fw );
        writer.write("Message Source");
        writer.write("Message Name");
        writer.write("Component");
        writer.write("Occurance");
        writer.write("Message Payload");
        writer.write("Bandwidth (Payload)");
        writer.write("Message Payload with Header");
        writer.write("Bandwidth (Payload with Header)");
        writer.newLine();
        for (Signal signal : messages) {
            writer.write(signal.getSource());
            writer.write(signal.getName());
            writer.write(signal.getComponent());
            writer.write(Integer.toString(signal.getOccurance()));
            writer.write(Integer.toString(signal.getSize()));
            writer.write(Float.toString(signal.getBandwidth()));
            writer.write(Integer.toString(signal.getSizewithHeader()));
            writer.write(Float.toString(signal.getBandwidthWithHeader()));
            writer.newLine();
        }
        writer.flush();
        writer.close();
        fw.close();

データ列を適切に読み取れるように区切る方法はありますか?

編集

バッファ付きライターを使用する代わりにCSVReader、Java のライブラリを使用します。http://www.csvreader.com/java_csv.php 今のコードは

  DateFormat df = new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss");  
        File file = new File( dirName + "\\"+ df.format(new Date()) +"_Statistics.csv");  
        if ( !file.exists() )
            file.createNewFile();

        // Use FileWriter constructor that specifies open for appending
        CsvWriter csvOutput = new CsvWriter(new FileWriter(file, true), ',');

        //Create Header for CSV
        csvOutput.write("Message Source");
        csvOutput.write("Message Name");
        csvOutput.write("Component");
        csvOutput.write("Occurance");
        csvOutput.write("Message Payload");
        csvOutput.write("Bandwidth (Payload)");
        csvOutput.write("Message Payload with Header");
        csvOutput.write("Bandwidth (Payload with Header)");
        csvOutput.endRecord();
        for (Signal signal : messages) {
            csvOutput.write(signal.getSource());
            csvOutput.write(signal.getName());
            csvOutput.write(signal.getComponent());
            csvOutput.write(Integer.toString(signal.getOccurance()));
            csvOutput.write(Integer.toString(signal.getSize()));
            csvOutput.write(Float.toString(signal.getBandwidth()));
            csvOutput.write(Integer.toString(signal.getSizewithHeader()));
            csvOutput.write(Float.toString(signal.getBandwidthWithHeader()));
            csvOutput.endRecord();
        }
        csvOutput.flush();
        csvOutput.close();

データは適切にフォーマットされますが、問題は、コードを 2 回目に実行して 2 番目のファイルが作成され、新しいファイルに重複した行が含まれていることです。

私はいくつかのリソースを掃除していませんか?

ありがとう

4

3 に答える 3