2016-10-23 20 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

У меня есть еще одно сомнение. Что делать, если пользователь хочет загрузить файлы разных форматов, такие как txt или другие. Как это можно реализовать? – user3242329

0

Read CSV link this. CSV является файлом, разделенным запятыми, если вы читаете CSV и используете запятую в качестве разделителя и сопоставляете первую строку CSV (используйте сравнение строк, если в будущем будет изменено упорядочение столбцов) с именем столбца базы данных, и все готово.

+0

Спасибо за идею Ниша. Как насчет того, хочет ли система читать текстовый файл или какие-либо другие файлы? Будет ли BufferReader выполнять эти функции? – user3242329

+0

Каждый источник должен иметь свою логику для доступа к своей части обработки данных. BufferReader, Scanner может использоваться для чтения текстовых файлов. – Nishh