2016-04-19 2 views
-1

У меня есть код, который читает файл с использованием буферизованного считывателя и разбиения, указанный файл был создан с помощью метода, который автоматически добавляет 4 Кбайт пустого пространства в начале файла, это приводит к тому, что я читаю следующее:Как пропустить часть файла, а затем прочитать строку?

Сначала код:

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 пробелы и получить прямой к ac что я могу получить результат на регулярной основе? Потому что я буду использовать массив metaData позже в других операциях, и я уверен, что пробелы испортят количество слотов в массиве. Мы ценим любые предложения.

+4

Вы считали, err, '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]); 
     } 
    } 
} 
Смежные вопросы