2013-08-30 1 views
0

Java 코드를 실행 중입니다. readLine() 메서드는 텍스트 파일에 텍스트가있는 경우에도 텍스트 파일에서 빈 문자열을 반환합니다.readLine() 메서드는 빈 문자열, BufferedReader를 반환합니다.

BufferedReader csv = new BufferedReader(new FileReader("D:/SentiWordNet_3.0.0/home/swn/www/admin/dump/senti.txt")); 
String line = "";  
while((line = csv.readLine()) != null){ 
    String[] data = line.split("\t"); 
    Double score = Double.parseDouble(data[2])-Double.parseDouble(data[3]); 
} 

가 호출되는 split() 후, Arrayindexoutofboundsexception 던져 예외가있다.
아래는 텍스트 파일입니다. 각 행은 "a"으로 시작하여 그 뒤에 숫자가옵니다. 코드는 apocrine이라는 단어로 행을 검색 할 수 있었지만 eccrine이라는 단어는 검색 할 수 없었습니다. 디버그 모드로 실행했을 때 라인 변수가 빈 문자열로 반환되었습니다.

a00098529 0 분비 세포 분획이 분비물과 함께 분비되는 분비를 일으키는 아폽크린 # 1 (외분비 샘); "모유는 하나의 아포크린 분비물"

a00098736 0.25 0 엑 크린 # 1 (외분비샘)은 분비하는 세포의 일부를 방출하지 않고 투명한 수성 분비물을 생성한다. 체온 조절에 중요하다. 내부 정수압 하에서 표면이 올라가는 인공물 # 1 (물의); "교도관 우물"; "지하수 압력"

내가 다음 텍스트 파일

+0

http://stackoverflow.com/questions/7413830/java-read-line-from-file –

+2

문제의 텍스트 파일을 게시하고 문제에 대한 "샘플"코드를 작성하지 마십시오; 실제 코드를 게시하십시오. 파일에 빈 줄이 있습니까? – chrylis

+0

당신은 확실합니까?'filename'은 실제 파일입니까? 기억하십시오. 백 슬래시를 사용하는 경우 반드시 이스케이프 처리해야합니다. – Doorknob

답변

-1

에서 라인을 읽고 someother 구조를 사용해야하는 것은 파일에서 데이터를 읽을 수있는 샘플 방법이다.
각 행을 읽은 후 arraylist에 추가되고 arraylist가 반환됩니다.

public ArrayList<String> fileRead(String fileName){ 
     File   f; 
     String   s; 
     FileReader  fr = null; 
     BufferedReader br = null; 
     ArrayList<String> sl = new ArrayList<String>(); 
     try { 
      f = new File(fileName); 
      fr = new FileReader(f); 
      br = new BufferedReader(fr); 
      while((s=br.readLine())!=null){ 
       sl.add(s); 
      } 
     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     }finally{ 
       try { 
        if(br!=null) 
         br.close(); 
        if(fr!=null) 
         fr.close(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
     } 
     return sl; 
    } 
+1

왜 -1 값이 주어지는가? 그것은 내 친구 야 .... 난 그냥 파일에서 데이터를 읽고 ArrayList에 저장할 방법을 작성 –

+0

Rakesh 답장을 보내 주셔서 감사합니다. 나는 그것을 시도 할 것이다 – ramya

+0

귀하의 대답은 내 problem.it 어떤 오류 던져하지 않았다 그리고 그것은 모든 라인을 반환 할 수있었습니다. 답장을 보내 주셔서 감사합니다 – ramya

0

스캐너를 사용해보십시오 :

Scanner in = new Scanner(new FileReader("filename.txt")); 
while (in.hasNext()){ 
    String str = in.next()); 
    // Use it 
} 
+0

. 나는 스캐너를 사용해 보았지만 응답을 위해 – ramya

0

모든 라인을 읽으려면 :

while ((thisLine = br.readLine()) != null) { 
    System.out.println(thisLine); 
    } 

를이 난 당신이 텍스트 파일에 문제가 있다고 가정 한 후하지 작업을 수행합니다.

+0

덕분에 작동하지 않습니다. 이 작동하지 않습니다. 나는 내 파일을 내가 그때 돌봐야한다고 생각한다 – ramya

-1

키 포인트는 당신이 여기

new FileReader(filename) 

파일 이름이 "./data/myfile.txt"와 같은 파일 경로처럼을 FileReader를 사용하는 경우, 잘못 BufferedReader로 사용할 수 있습니다. ecplise 또는 compilier는 컴파일 오류 또는 경고를 제공하지 않지만 readLine()을 사용하면 파일에서 아무 것도 읽지 않는 치명적인 오류가 발생합니다. 과 같이 올바른 방법 :

BufferedReader csv = new BufferedReader(new FileReader(new File("filename"))) 
csv.readLine() 

내가 파일을 시도하고, 파일 형식이 잘못는 사실을 알게 될 것입니다. 파일 형식은 다음과 같습니다. 00098529 0 0 모든 문자열은 공백으로 구분되지만 탭이 아니므로 split ("\ t")을 사용할 때 아무 것도 얻지 못합니다. 파일 형식으로 제공, 당신은 분할을 사용한다 ("") 또는 당신은 ... 당신은 다음 BufferedReaderreadline()의 자바 독에서 볼 수

+0

답장을 보내 주셔서 감사합니다. 이 방법을 시도했지만 여전히 오류가 있습니다. – ramya

+0

파일을 검사했지만 파일 형식이 잘못되었습니다. 파일 형식은 다음과 같습니다. a 00098529 0 0 모든 문자열은 공백으로 구분되지만 탭이 아니므로 split ("\ t")을 사용하면 아무 것도 얻을 수 없습니다.파일 형식이 주어지면 split ("")을 사용하거나 각 문자열을 탭 – lonerranger

+0

으로 나눠서 파일 형식을 변경해야합니다.이 사이트에서 텍스트 파일을 업로드 할 수있는 방법은 여기에 복사하면 확실합니다. – ramya

0
 //Get scanner instance 
     Scanner scanner = new Scanner(new File("SampleCSVFile.csv")); 

     //Set the delimiter used in file 
     scanner.useDelimiter(","); 

     //Get all tokens and store them in some data structure 
     //I am just printing them 
     while (scanner.hasNext()) 
     { 
      System.out.print(scanner.next() + "|"); 
     } 

     //Do not forget to close the scanner 
     scanner.close(); 
+0

나는 arraylist를 사용하여 라인 – ramya

+1

을 저장했지만 귀하의 방법도 시도 할 것입니다. – ramya

0

탭 각각의 문자열을 분할하여 파일 형식을 변경해야합니다

텍스트 줄을 읽습니다.한 줄은 줄 바꿈 ('\ n'), 캐리지 리턴 ('\ r') 또는 캐리지 리턴 다음에 바로 줄 바꿈으로 끝나는 것으로 간주됩니다. 당신이 텍스트는 캐리지 리턴 다음에 줄 바꿈 ('\n')로 구성되어 있다면

그래서, BufferedReader은 빈 문자열을 반환합니다. 다음과 같은 문자열을 고려하십시오.

ABC \ n 개의 \의 rdef

이 반환됩니다 "abc", "", "def" 당신이 readLine() 3 번 호출합니다. 위의 String뿐만 아니라 다음 String도 같은 결과를 초래할 수 있습니다.

ABC \ n \

NDEF ABC \ 연구 \ 이들 조합 중 하나 이상을 포함하는 텍스트 파일에서

rdef, 그것은이 있어야합니다. 또는 특수 문자 사이에 whitespases이 포함될 수 있습니다. 예를 들어 :

ABC \ n \ t \ NDEF

ABC \ 없음 \의 rdef

등등 ... 당신은 빈 줄을 얻고있는 이유

.

이 문제를 극복하려면 while-loop에서 줄이 비어 있는지 확인할 수 있습니다.

while ((line = csv.readLine()) != null) { 
    if(line.trim().isEmpty()){ 
     continue; 
    } 
    //Your code 
} 
관련 문제