2013-08-30 102 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。當我在調試模式下運行時,行變量返回爲空字符串。

a 00098529 0 0大汗腺分泌#1(外分泌腺)產生分泌物,其中分泌細胞的一部分與分泌物一起釋放; 「母親的乳汁是一個大汗腺分泌物」

一個00098736 0.25 0汗腺#(的外分泌腺)1的製造而不釋放分泌細胞的部分透明的含水分泌;在調節體溫方面是重要的

a 00098933 0 0自流水#1(水)在內部靜水壓力下上升到 表面; 「自流井」; 「自流壓」

我應該使用一些其它結構來從文本文件

+0

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

+2

請在發帖討論的文本文件,不寫你的問題「樣本」代碼;發佈你的真實代碼。文件中是否有空行? – chrylis

+0

你確定*'filename'是一個真實的文件嗎?請記住,如果您使用反斜槓,您必須將它們轉義出來 – Doorknob

回答

-1

繼讀出的線是從文件中讀取數據的樣品的方法。
這裏在讀完每一行後將其添加到數組列表中,並返回數組列表。

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

你的答案適合我的問題。它沒有拋出任何錯誤,它能夠將所有的線路都還給我。謝謝 – 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

關鍵是你用錯了的BufferedReader,如果您使用的FileReader像

new FileReader(filename) 

這裏的文件名是像「./data/myfile.txt」的文件路徑。 ecplise或編譯器不會給出編譯錯誤或警告,但是,這是一個致命錯誤,如果您使用readLine(),將導致文件無法讀取。 正確的方法是這樣的:

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

我想你的文件,並找到你的文件格式錯誤。你的文件格式如下:00098529 0 0每個字符串用空格隔開,但不是製表符,所以當你使用split(「\ t」)時,你什麼也得不到。給你的文件格式,你應該使用拆分(」「),或者你應該將每個串片

+0

感謝您的答覆。我試過這種方式,但仍然存在錯誤 – ramya

+0

我試過你的文件,發現你的文件格式不對。 你的文件格式如下: a 00098529 0 0 每一個字符串之間用空格隔開,但不是製表符,所以當你使用split(「\ t」)時,你什麼也得不到。給你的文件格式,你應該使用拆分(「」),或者你應該改變你的文件格式通過分割每個字符串與標籤 – 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

您可以BufferedReader以下在readline()的javadoc看到改變你的文件格式..

讀取一行文字。換行符被換行符('\ n'),回車符('\ r')或回車符後面的換行符中的任何一個結束。

所以,如果你的文本是由一個換行符('\n')後跟一個回車,BufferedReader將返回一個空字符串。考慮以下字符串。

ABC \ n \ rdef

這將返回​​,"""def"如果調用readLine() 3倍。不僅是上面的String,下面的String也可能會導致相同的結果。

ABC \ n \ NDEF

ABC \ r \ rdef

在你的文本文件,它必須包含這些組合中的一種或多種。或者它可能包含這些特殊字符之間的whitespases。作爲例子:

ABC \ n \ t \ NDEF

ABC \ n \ rdef

等等...

這就是爲什麼你得到一個空行。

要解決此問題,您可以檢查while-loop中的行是否爲空。

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