1

フィールド内にコンマが含まれる csv ファイルの読み取りに問題があります。csv が読み取られるときに二重引用符が生成され、このデータがテーブルに渡されるときに、引用符が異なる列の値の位置を再配置します。「|」を使用しました テーブルをビューとして表しますが、コンマで区切られています。

エクセルで開いた場合

  LD            |LA| L|       T            |A

 Car Park Store,|  |4a|South Bank Road     |

コードで開いたとき

  LD            |LA| L|       T            |A

"Car Park Store |" |  |       4a           |South Bank Road

アイデアは、Excel でのように表示することです。

   public void readFromFile(){
   List<String> output = new ArrayList<String>();
  try{
    BufferedReader bufferedReader = new BufferedReader(new FileReader(filename));
    String line = "";

    while ((line = bufferedReader.readLine()) != null){
     output.add(line);
    }

    bufferedReader.close();

  } catch(FileNotFoundException fne){
    csvReaderErrorMessage +=  "File '" + filename + "' cannot be found.";

  }catch(IOException ioe){
    csvReaderErrorMessage +=  "Problem reading file: '" + filename+"'";
  }

  csvDataModel.setData(output);

 }
4

1 に答える 1

7

指定したコードは、実際にはファイルを解析しません。それはそれを行に分割します、しかしそれはそれがするすべてです。

行を値に解析する必要があります。幸い、それを自分で行うために多くのコードを記述する必要はありません。JavaCSVOpenCSVSuper CSVなどのライブラリを使用すると、これが簡単になります。

したがって、解析後、行のコレクションが作成され、各行は値のコレクションになります。データをよりクリーンに処理できるように、各行を処理するクラスを作成することをお勧めします。「|」のようなものを表示せずに、SwingUIで適切にフォーマットできるはずです。値の間。

可能な限り適切な形式でデータを処理することが重要です。したがって、ファイルを読み取るときは、すべての解析作業をできるだけ早く実行してください(もちろん、そうしないという本当に正当な理由がない限り)。あなたのコードのよりきれいにすることができます。UIコードは、最初にCSVファイルからデータをロードしたことをまったく気にしないはずです。

于 2012-09-09T09:15:02.250 に答える