2013-10-13 2 views
0
import java.util.Scanner; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Arrays; 
import java.util.ArrayList; 


/** 
* Write a description of class ReadInCsv here. 
* 
* @author (Kevin Knapp) 
* @version (10-10-2013) 
*/ 
public class ReadInCsv 
{ 
    public static void main(String[] args) 
    { 
     String csvName = "Countries.csv"; 
     File csvFile = new File(csvName); 
     ArrayList<String> nameList = new ArrayList<>(); 
     ArrayList<String> popList = new ArrayList<>(); 
     ArrayList<String> areaList = new ArrayList<>(); 
     ArrayList<String> gdpList = new ArrayList<>(); 
     ArrayList<String> litRateList = new ArrayList<>(); 




     try 
     { 
      Scanner in = new Scanner(csvFile).useDelimiter(","); 



      while (in.hasNext()) 
      { 

      String name = in.next(); 
      nameList.add(name); 
      String pop = in.next(); 
      popList.add(pop); 
      String area = in.next(); 
      areaList.add(area); 
      String gdp = in.next(); 
      gdpList.add(gdp); 
      String litRate = in.next(); 
      litRateList.add(litRate); 

     } 
      in.close(); 
      System.out.println(nameList); 
      System.out.println(popList); 
      System.out.println(areaList); 
      System.out.println(gdpList); 
      System.out.println(litRateList); 

     } 
     catch (FileNotFoundException e) 
     { 
      e.printStackTrace(); 
     } 


    } 
} 

그래서 CSV 파일에서 읽으 려하고 각 스캔 된 인스턴스를 배열 목록에 추가해야합니다 (나중에이 목록의 각 요소를 참조하려고합니다) ,하지만 내 결과는 뭔가를 읽고 추가하자마자 다음 문자열을 읽기 전에 다음 줄로 건너 뜁니다. 대각선으로 건너 뛰지 않고 똑바로 읽을 필요가 있음을 나타냅니다.CSV 파일에서 잘못된 출력

메신저 정말 간단합니다. , 방금 전에 약 1 주일 전에 자바를 배우기 시작했습니다. 도움을 주셔서 감사합니다.

답변

1

이 방법의 가장 큰 문제점은 파일의 각 줄이 통신으로 끝나지 않으면 a, 줄 바꿈은 구분되지 않습니다. 더 좋은 방법은, 각 행을 읽을 쉼표에 분할하고, 한 번에 ArrayLists 한 줄에 값을 추가하는 것입니다

Scanner in = new Scanner(csvFile); 
while (in.hasNextLine()) { 
    String[] fields = in.nextLine().split(","); 
    if (fields.length == 5) { 
     nameList.add(fields[0]); 
     popList.add(fields[1]); 
     areaList.add(fields[2]); 
     gdpList.add(fields[3]); 
     litRateList.add(fields[4]); 
    } else { 
     // Bad line...do what you want to show error here 
    } 
} 

더 좋은 방법은 CSV 파일을 읽기 전용 자바 라이브러리를 사용하는 것입니다. 빠른 Google 검색은 좋은 검색 결과를 보여줍니다.

+0

아, 나는 1과 비슷한 것을 가지고 있었는데, 나는 모든 것을 긴 배열로 읽었지만 몇 가지 이유로 물건을 바꾸기 시작했다. 내가 생각한 경로는 내가 시작한 아이디어 경로에 머물러 있었다. 그래서 나는 이해한다. 이 id는 이해를 선호합니다. 그러면 그냥 누군가가 나를 위해이 문제에 답할 수있게합니다. 원래 하나의 긴 배열이 있다고 생각하므로 in.nextLine()을 사용한다고 가정합니다. split (","); 인덱스 5+를 계속 사용하는 대신에 요소 인덱스 (0-4)를 새로 반복하는 것으로 시작합니다. 원래 문제는 –

+0

이었습니다. 'in.nextLine(). split (",")'에 대한 이해가 올바른 것 같습니다. 생각해 볼 수있는 또 다른 방법은 CSV 파일은 거의 스프레드 시트 (Excel 등)입니다. 각 행은 별도의 항목입니다. 각 행을 한 번에 하나씩 읽은 다음 이동하기 전에 해당 행을 조작하려고합니다 다음 하나에, 행을 함께 체인 또는 각각의 개별 셀에 작동하려고합니다. –

+0

아 그래, 내 코드를 디버깅하기위한 테스트 csv로 엑셀 시트를 사용합니다. 덕분에, 완벽하게 지금 작동합니다. –