2014-11-23 2 views
0

java를 사용하여 .csv 파일에서 선택 데이터를 가져 오려고합니다. 예를 들어자바를 사용하는 CSV 파일의 검색 범위 데이터

:

CSV 파일에는 다음이 포함

Blue, 03/11/2014, 13:00, 10 
pink, 04/11/2014, 14:00, 15 
Red, 03/11/2014, 15:00, 50 

나는 사용자가 해당 파일에서 원하는 정보를 선택할 수 있습니다 자바 프로그램을 만들려고합니다.

내가하지만 아래의 예에서 일한지

문자열이 아닌 날짜/intergers를 인쇄 할 경우에만 수 :

package csv; 

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.HashMap; 
import java.util.Map; 
import java.util.Arrays; 
import java.util.Scanner; 


public class ReadCVS { 
    public static void main(String[] args) { 

     ReadCVS obj = new ReadCVS(); 
     obj.run(); 

    } 

    public void run() { 

     String csvFile = "GeoIPCountryWhois.csv"; 
     BufferedReader br = null; 
     String line = ""; 
     String cvsSplitBy = ","; 
     File file = new File("GeoIPCountryWhois.csv"); 
     Scanner in = null; 

     try { 

      br = new BufferedReader(new FileReader(csvFile)); 
      while ((line = br.readLine()) != null) { 

       // use comma as separator 
       String[] colour = line.split(cvsSplitBy); 

       //System.out.println(country[0]+ country[1] + country[2]+ country[3]); 

       for (int i = 0; i < colour.length; i++) { 
        if (colour[i].equals("Pressure")) { 
         System.out.println(colour[0] + colour[1] + colour[2] + colour[3]); //Matching the string and printing. 
        } 
       } 

      } 

     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      if (br != null) { 
       try { 
        br.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 

     System.out.println("Done"); 
    } 

} 

어떤 도움/팁을 이해할 수있을 것이다!

감사합니다.

+2

질문이 막연합니다. 더 자세히 설명해주세요. – alterfox

답변

1

csv 파일을 구문 분석하기 위해 타사 라이브러리를 사용하는 것이 좋습니다. 이를 통해 파일 파싱에 매달리는 대신 수행하려는 작업의 본질에 집중할 수 있습니다. 예를 들어 Apache Commons CSV과 같이 살펴보십시오. 이 코드 모양과 같이 할 것입니다 :이 같은 DateInteger 구문 분석과 같은 몇 가지 추가 분석을 수행하는 방법을

Reader in = new FileReader("GeoIPCountryWhois.csv"); 
DateFormat df = new SimpleDateFormat("MM/dd/yyyy"); 
Iterable<CSVRecord> records = CSVFormat.EXCEL.parse(in); 
for (CSVRecord record : records) { 
    String colour = record.get(0); 
    Date date = df.parse(record.get(1)); 
    String timeString = record.get(2); 
    Integer value = Integer.parseInt(record.get(3)); 
    // do what you want with the values here. 
} 

알 수 있습니다. 이렇게하면 비교를 수행 할 수 있기 때문에 이러한 열을 더 쉽게 필터링 할 수 있습니다.

당신은 타사 종속성을 원하지 않는 경우, 당신은 당신이 가지고있는 비슷한 할 수있는이 코드는 모든 컬럼에 String.trim()를 호출하는 방법을

DateFormat df = new SimpleDateFormat("MM/dd/yyyy"); 

while ((line = br.readLine()) != null) { 
    // use comma as separator 
    String[] columns = line.split(cvsSplitBy); 

    // extract the columns. 
    String colour = columns[0].trim(); 
    Date date = df.parse(columns[1].trim()); 
    String time = columns[2].trim(); 
    Integer otherValue = Integer.parseInt(columns[3].trim()); 

    // filter on the colour column. 
    if(colour.equals("Red")) { 
     System.out.printf("colour = %s, date = %s, time = %s, val = %d\n", colour, df.format(date), time, otherValue); 
    } 

} 

참고. 행을 나눈 후 열 주위에 여분의 공백이있는 경우입니다. 예를 들어, "a, b, c".split(",")String 배열 {"a", " b", " c"}이되고 " b"" c"에 여분의 공백이 있습니다. 이것은 아마도 첫 번째 열만 필터링 할 수있는 버그의 원인 일 것입니다.

잔인한 일종의 세 번째 옵션으로 CsvJdbc을 사용할 수 있습니다. 이것은 SQL 인터페이스를 통해 SQL 쿼리를 실행할 수있는 SQL 파일을 제공합니다. 나는이 라이브러리를 사용한 적이 없지만 재미있을 것 같습니다. CSV 파일을 필터링하려고한다는 것을 감안할 때.

+0

고마워, 내가 전에 줄께 – user1291606

+0

trim()이 코드를 수정 했습니까? –