OpenCSV libに問題があります。正確には、文字列をファイル自体に書き込むことです。Java OpenCSVライター - 結果として空のファイル
public class Calc {
public static Summary summary;
public static CSVWriter writer;
(...)
someButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
(...)
summary = new Summary();
writer = summary.createCSV();
someThreadedMethod();
summary.closeWriter(writer);
} catch (...) {}
}
}
}
}
概要クラス:
public class Summary {
private static int version = 0;
private static String name;
public Summary() throws IOException {
this.version += 1;
this.name = "Summary" + Integer.toString(version) + ".csv";
}
public CSVWriter createCSV() throws IOException {
CSVWriter writer = new CSVWriter(new FileWriter(name));
return writer;
}
public void addInfo(CSVWriter writer, String info) {
String[] record = info.split("#");
writer.writeNext(record);
}
public void closeWriter(CSVWriter writer) throws IOException {
writer.close();
}
}
とsomeThreadedMethod()が与えられたウェブサイトにログインし、与えられた文字列のフォームテーブルを解析し、別のクラスのオブジェクトを作成します。
(...)
ArrayList<String> contentStrToPrint = new ArrayList<>(Arrays.asList(someStringArray));
for (int i = 7; i < contentStrToPrint.size(); i += 7) {
for (String aSomething : something) {
if (contentStrToPrint.get(i).contains(aSomething)) {
StringBuilder summary = new StringBuilder();
for (int j = i; j < i + 7; j++) {
row.add(contentStrToPrint.get(j));
if (j != i + 6)
summary.append(contentStrToPrint.get(j)).append("#");
else
summary.append(contentStrToPrint.get(j));
}
data.add(row);
Calc.summary.addInfo(Calc.writer, summary.toString());
row = new Vector<>();
}
}
}
私はそれを知っています最善のコードではありません。 その結果、私は空白になる "概要N .csv"ファイル。私はここで間違いを見ることはできません。また、私はでこれを再現しました。テストプロジェクト - はるかに簡単で、指定されたArrayList(指定されたString []からも作成されています)の文字列をbuttonClickに書き込むだけです。 また、可能な段階で値を出力すると、適切な文字列が返されます。どういうわけか(私はどういうわけか)スレッドの方法で接続することは可能ですか?
ご協力いただければ幸いです。
PS funとVectorsはいくつかの値を表示するために重要ではありません。あなたは、私は以下の提案を持って、新しいバージョンのファイルたいアクションに入ることいつでも仮定し
「データ」とは何ですか?行は同期された 'Vector'クラスですが、' data'も同期させる必要があります。それ以外の場合、行を作成するスレッドは適切にパブリッシュしないため、他のスレッドはそれを見ます。最後に、 'Vector'は古いクラスであり、使用すべきではありません。参照してください:https://stackoverflow.com/questions/1386275/why-is-java-vector-class-considered-obsolete-or-deprecated – Gray
ベクトルは本当に私の問題ではありません(すでに解決済みです)が、必要ならばそれが便利なケースであることを知るためには、ベクトルからテーブルを作るのは簡単です。私の場合、これらはあまり使われていません。 – Canert