2016-10-23 2 views
0

csvファイルのヘッダーと行を分析するために、システムがcsvファイルを読み取るようにします。 csvファイルのヘッダーは、ProductDetail.javaの変数と一致する必要があります。ヘッダーがこれらの変数と一致する場合は、読み込まれた行をそれらのヘッダーの下にデータベースに挿入します。ファイルの内容(ヘッダー)とjavaの定義済み変数とデータベースの更新を比較するにはどうすればよいですか?

ProductDetail.java

public class ProductDetail { 
String street; 
String city; 

public String getStreet() { 
    return street; 
} 

public void setStreet(String street) { 
    this.street = street; 
} 

public String getCity() { 
    return city; 
} 

public void setCity(String city) { 
    this.city = city; 
} 
} 

ReadFile.java

public class ReadFile { 
    public static void main(String[] args) { 
    FileReader input = null; 
     BufferedReader br = null; 

     try { 

      input = new FileReader("uploadedFile.csv"); 
      br = new BufferedReader(input); 
      String str; 

      while ((str = br.readLine()) != null) { 
       System.out.println(str); 
      } 
     } 
     catch (IOException e) { 
      e.printStackTrace(); 
     } 
     finally { 
      try { 
       input.close(); 
       br.close(); 
      } 
      catch (IOException x) { 
       x.printStackTrace(); 
      } 
     } 
    } 
} 

私はプロジェクトを開始しましたが、今私は、列&行とマッチがあるものの定義済みのヘッダーを読んでどのようにかなりこだわっていますProductDetail.javaに設定されます。もしあなたが私にこれを手伝ってもらえるといいですね。

+0

なぜcsv apiを使用しないのですか?コードを検証するのは簡単です。あなたが興味があれば、私はあなたの必要性をテストしていないサンプルを投稿することができます – davidxxx

+0

@ davidxxx私はCSV APIを見ていきます。何かを始めるのに役立つ例を投稿してください。 – user3242329

+0

私はSuperCsvで例を挙げました。あなたのニーズに合わせて古いコードを再利用しました。 – davidxxx

答えて

0

SuperCSVを使用すると、csvのヘッダーが予想されるヘッダーと一致することを検証できます。 一般に、予想されるヘッダーは固定されています。だから、それらを定数として書くべきです。

public static void main(String[] args) throws IOException { 
CsvBeanReader csvBeanReader = null; 
try { 

    // your csv file 
    String csvFile = null; 
    csvBeanReader = new CsvBeanReader(csvFile), CsvPreference.EXCEL_NORTH_EUROPE_PREFERENCE); 

    final String[] headersArray = csvBeanReader.getHeader(true); 
    List<String> headers = Arrays.asList(headersArray); 
    List<String> expectedHeaders = Arrays.asList("street", "city"); 
    if (!expectedHeaders.equals(headers)) { 
     return; 
    } 

    final CellProcessor[] processors = new CellProcessor[] { new NotNull(), new NotNull() }; 

    List<ProductDetail> productDetails = new ArrayList<>(); 
    ProductDetail productDetail = null; 

    while ((productDetail = csvBeanReader.read(ProductDetail.class, headersArray, processors)) != null) { 
     productDetails.add(productDetail); 
    } 
    // save products in your DB 
} 
finally { 
    try { 
     csvBeanReader.close(); 
    } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
} 
+0

知識を共有していただきありがとうございます。 – user3242329

+0

あなたは大歓迎です。何か問題が発生した場合、戻ってくるのをためらってください。私は他の人を助けることができるならば、CSV処理の多くの多くのコードを開発しました:) – davidxxx

+0

私は疑問がもう1つあります。ユーザーがtxtなどの異なる形式のファイルをアップロードする場合はどうなりますか?どのように実装することができますか? – user3242329

0

Read CSV link this。 CSVはカンマで区切られたファイルで、CSVを読み込んだ場合は区切り記号としてカンマを使用し、データベース列名を使用してCSVの最初の行をマッピングします(将来の列の順序が変更された場合は文字列比較を使用します)。

+0

Nishhというアイデアをありがとう。システムがテキストファイルや他のファイルを読みたいのであればどうでしょうか? BufferReaderはこれらの機能を実行できますか? – user3242329

+0

各ソースは、データ操作の部分にアクセスするためにロジックを持つ必要がありました。 BufferReader、Scannerはテキストファイルの読み取りに使用できます。 – Nishh

関連する問題