2017-09-21 2 views
0

저는 Java를 처음 사용 했으므로이 클래스를 사용하여 "test.csv"의 내용을 반환하려고합니다. 로컬 파일 경로를 사용할 때만 작동합니다.bufferedReader는 로컬 CSV 파일 만 읽습니다.

public class CSVtoArray2 { 

    public static final String filename = "C:\\eclipse\\workspace\\project\\src\\main\\webapp\\resources\\csv\\test.csv"; 


    public String testMethod() throws IOException { 
     BufferedReader wr = null; 

     try { 

      wr = new BufferedReader(new FileReader(new File(filename))); 

      StringBuffer stringBuffer = new StringBuffer(); 
      String line; 
      while ((line = wr.readLine()) != null) { 
       stringBuffer.append(line); 
       stringBuffer.append("\n"); 
      } 
      wr.close(); 
      return stringBuffer.toString(); 
     } finally { 
      wr.close(); 
     } 
    } 
} 

나는

"C : \ 이클립스 \ 작업 공간 \ 프로젝트 \ SRC \ 주 \의 웹 애플리케이션 \ 리소스 \ CSV \ 테스트 .CSV"변경하면 에 "/resources/csv/test.csv을 ",

이 클래스는 null 반환을 가져옵니다.

누구에게 도움을 줄 수 있습니까?

감사합니다.

UPDATE :

솔루션 :

자원 폴더를 프로젝트 내 CSV 파일을 복사 : 그것은 까다 롭습니다

ClassLoader classLoader = getClass().getClassLoader(); 
File filename = new File(classLoader.getResource("csv/test.csv").getFile()); 
+0

'src' 폴더는 컴파일 된 클래스가 실행되는 곳에 상대적으로 존재하지 않습니다. –

+0

여전히 여기서 작동하지 않습니다. 다른 생각? 고맙습니다! –

+0

https://stackoverflow.com/questions/13967307/reading-from-src-main-resources-gives-nullpointerexception –

답변

1
org.apache.commons.io.IOUtils.toString(CSVtoArray2.class.getResourceAsStream("/csv/test.csv"), Charset.forName("UTF-8"))) 

는, 자원에 대한 루트 경로 것입니다. Eclipse에서 일부 폴더 (예 : webapp/recource)를 리소스 폴더로 표시 할 수 있습니다. jar 파일을 만들면 리소스 폴더 내용이 루트에있게됩니다. 따라서 리소스 경로를 /부터 시작하면 루트 (즉, 리소스 폴더의 루트)을 의미합니다.

나는 상대 경로를 사용하지 않으므로 open resource with relative path in java에서 더 많은 정보를 얻을 수 있습니다.

+0

참고 : Apache commons io가 필요합니다. –