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

당신은 환영합니다. 문제가 발생하면 언제든지 다시 오십시오. 내가 다른 사람을 도울 수 있다면 나는 CSHP 처리로 많은 많은 코드를 개발했다 :) – davidxxx

+0

나는 한 가지 더 의심이있다. 사용자가 txt 또는 기타와 같은 다른 형식의 파일을 업로드하려고하면 어떻게됩니까? 어떻게 구현 될 수 있습니까? – user3242329

0

Read CSV link this. CSV는 CSV를 읽는 경우 쉼표로 구분 된 파일이며 쉼표를 구분 기호로 사용하고 데이터베이스 열 이름과 함께 CSV의 첫 번째 행 (열 순서가 나중에 변경되면 문자열 비교 사용)을 매핑하면 완료됩니다.

+0

아이디어 Nishh에 감사드립니다. 시스템이 텍스트 파일이나 다른 파일을 읽으 려한다면 어떨까요? BufferReader가 이러한 기능을 수행 할 수 있습니까? – user3242329

+0

각 소스는 데이터 조작 부분에 액세스하기 위해 논리를 가질 필요가있었습니다. BufferReader, Scanner는 텍스트 파일을 읽는 데 사용할 수 있습니다. – Nishh