2016-03-05 6 views
1

У меня есть файл, который может отличаться по размеру в терминах строк. Единственное, что я знаю, это то, что он выполнен из одних и тех же модулей, скажем, 7 строк. Таким образом, это означает, что .txt может быть 7, 14, 21, 70, 77 и т. Д. Строк. Мне нужно получить только заголовок каждого модуля - строка 0, 7 и т. Д.Чтение определенной строки из файла .txt в android

Я написал этот код для работы:

textFile = new File(Environment.getExternalStorageDirectory() + "/WorkingDir/" + "modules.txt"); 

    List<String> headers = new ArrayList<>(); 

    if (textFile.exists()) { 
     try { 
      FileInputStream fs= new FileInputStream(textFile); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(fs)); 
      int lines = 0; 
      int headLine = 0; 
      while (reader.readLine() != null) { lines++;} 
      Log.i("Debug", Integer.toString(lines)); 
      while(headLine < lines){ 


       for (int i = 0; i < dateLine - 1; i++) 
       { 
        reader.readLine(); 
        Log.i("Debug", reader.readLine()); 
       } 
       headers.add(reader.readLine()); 


       headLine += 7; 
      } 

      Log.i("Debug", headers.toString()); 


     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

Проблема заключается в том, что она всегда возвращает [NULL]. Я не знаю, где проблема, так как я использовал подобные вопросы из переполнения в качестве ссылок.

+0

http://stackoverflow.com/questions/2312756/how-to-read-a-specific-line-using-the-specific-line-number-from-a-file-in-java – sasikumar

+0

Я прочитал этот вопрос, вот где я получил общую идею. http://stackoverflow.com/a/2312789/4491661 - в частности, –

+0

вы получаете буферизованный читатель в файл, подобный этому BufferReader br = new BufferedReader (новый FileReader (файл)), а затем 'line = br.readLine () ' – Bhargav

ответ

2
ArrayList<String> headerLines = new ArrayList(); 
BufferedReader br = new BufferedReader(new FileReader(file)); 
try { 
    String line; 
    int lineCount = 0; 
    while ((line = br.readLine()) != null) { 
     // process the line. 
     if(lineCount % 7 == 0) { 
      heaaderLines.add(line); 
     } 
     lineCount ++; 
    } 
} catch (IOException ioEx) { 
    ioEx.printStackTrace(); 
} finally { 
    br.close(); 
} 
+0

@UmaKanth oops, спасибо, что отредактировал lol! – Bhargav

+0

этот человек выполняет свою работу. Хотя он говорит, что для «Try-with-resources» требуется уровень API 19. Я полагаю, что это будет противоречить более ранним устройствам. Есть ли способ исправить это? –

+0

да, я не знал вас, ваш minSdkVersion, поэтому я выбрал способ с наименьшим количеством кода, плохо модифицировал его с помощью старого стиля обработки java vesion для обработки ресурсов. – Bhargav