2016-04-19 195 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]); 
     } 
    } 
} 
相关问题