2016-04-19 240 views
-1

我有一個使用緩衝讀取器和分裂讀取文件的代碼,所述文件是通過在文件開頭自動添加4KB空白空間的方法創建的,這導致我在讀取以下內容時發生:如何跳過文件的一部分然後讀取一行?

首先代碼:

BufferedReader metaRead = new BufferedReader(new FileReader(metaFile)); 
String metaLine = ""; 
String [] metaData = new String [100000]; 

     while ((metaLine = metaRead.readLine()) != null){ 
      metaData = metaLine.split(","); 
      for (int i = 0; i < metaData.length; i++){ 
       System.out.println(metaData[i]); 
     } 
     } 

這是結果,記住這個文件已經存在,並且包含值:

//4096 spaces then the first actual word in the document which is --> testTable2 
Name 
java.lang.String 
true 
No Reference 

有沒有辦法跳過第4096位,並獲得直交流文件內的價值所以我可以定期得到結果?因爲我稍後會在其他操作中使用metaData數組,並且我非常確定這些空格會混淆數組中的插槽數量。任何建議,將不勝感激。

+4

你有沒有考慮過,呃,'BufferedRead er.skip()'? – EJP

+1

爲什麼不修覆文件創建以擺脫無意義的4K空間?而不是建立合作的錯誤? – EJP

回答

0

如果您使用的是Eclipse,自動完成應該有所幫助。

metaRead.skip(4096); 

https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html

+0

我可能誤解了你的問題。你想跳過4096個空格,而不是字節? –

+0

同樣的事情,'Reader.skip()'跳過字符。 – EJP

+0

我的意思是說,如果他有一堆字符,其中一些是字母,數字等,他想跳過4096個空格,那麼這是行不通的。 但我認爲數字4096是一個很大的線索。 –

0

你可以(如前所述)簡單地做:

metaRead.skip(4096);

如果空白始終佔據許多字符,或者你可能只是避免空行

while ((metaLine = metaRead.readLine()) != null){ 
    if(metaLine.trim().length() > 0){ 
     metaData = metaLine.split(","); 
     for (int i = 0; i < metaData.length; i++){ 
      System.out.println(metaData[i]); 
     } 
    } 
} 
相關問題