Чтение определенных строк - Java - PullRequest
0 голосов
/ 16 августа 2011

Мне нужно извлечь две строки из 1 .txt файлов и вывести их в диалоговое окно. Мой код на данный момент

private String getfirstItem() {
     String info = "";
     File details = new File(myFile);
     if(!details.exists()){
            try {
                details.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

      BufferedReader read = null;
    try {
        read  = new BufferedReader (new FileReader(myFile));
    } catch (FileNotFoundException e3) {
        e3.printStackTrace();
    }

     for (int i = baseStartLine; i < baseStartLine + 1; i++) {
                  try {
                info = read.readLine();
                } catch (IOException e) {

                    e.printStackTrace();
                }
            } 
            firstItem = info;             
          try {
              read.close();
        } catch (IOException e3) {

            e3.printStackTrace();
        }
          return firstItem;
}

private String getsecondItem() {
    File details = new File(myFile);
    String info = "";
   BufferedReader reader = null;
  if(!details.exists()){
try {
    details.createNewFile();
} catch (IOException e) {
    e.printStackTrace();

}}



try {
reader   = new BufferedReader (new FileReader(myFile));
} catch (FileNotFoundException e3) {
    e3.printStackTrace();
    }

 for (int i = modelStartLine; i < modelStartLine + 1; i++) {
          try {
     info= reader.readLine();
            } catch (IOException e) {
        e.printStackTrace();}
        modelName = info;}  try {
          reader.close();
} catch (IOException e3) {
    e3.printStackTrace();
    }
 return secondItem;
}

Тем не менее, я продолжаю получать одно и то же значение для обоих? modelStartLine = 1 и baseStartLine = 2

Ответы [ 2 ]

2 голосов
/ 16 августа 2011

На самом деле вы никогда не пропускаете любых строк.Вы запускаете свой индекс цикла с другого числа, но вы все еще делаете цикл только один раз, с начала файла.Ваш цикл должен выглядеть примерно так:

public string readNthLine(string fileName, int lineNumber) {
    // Omitted: try/catch blocks and error checking in general
    // Open the file for reading etc.

    ...

    // Skip the first lineNumber - 1 lines
    for (int i = 0; i < lineNumber - 1; i++) {
        reader.readLine();
    }

    // The next line to be read is the desired line
    String retLine = reader.readLine();

    return retLine;
}

Теперь вы можете просто вызвать функцию следующим образом:

String firstItem = readNthLine(fileName, 1);
String secondItem = readNthLine(fileName, 2);

Однако .Так как вам нужны только первые две строки файла, вы можете просто прочитать их обе изначально:

// Open the file and then...
String firstItem = reader.readLine();
String secondItem = reader.readLine();
0 голосов
/ 16 августа 2011

это правильно. вы читаете обоими способами только первую строку файла. Когда вы создаете новый Reader и читаете строку с помощью метода readLine (), он возвращает первую строку файла. независимо от числа в вашем цикле.

for(int i = 0; i <= modelStartLine; i++) {
   if(i == modelStartLine) {
       info = reader.readLine();
   } else {
       reader.readLine();
   }
}

это простое решение для чтения одной строки.

для первой строки, вам не нужен цикл for. Вы можете создать ридер и вызвать метод readLine (). это возвращает первую строку.

...