文本文件行 reader- java

textfile line reader- java

    ArrayList <Integer> referenceNom = new ArrayList <Integer>();
    ArrayList <String> bookTitle = new ArrayList <String>();
    BufferedReader br = null;

    try {
        br = new BufferedReader(new FileReader("Booklist.txt"));
        while ((br.readLine()) != null ){
            for (int count = 1; count <= 44; count++){
                if (count % 2 == 1){
                    referenceNom.add(Integer.parseInt(br.readLine()));
                    System.out.print(referenceNom.get(count));
                }else {
                    bookTitle.add(br.readLine());
                    System.out.print(bookTitle.get(count));
                }
            }                                     
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            br.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

我正在尝试创建一个 reader 来读取文本文件的行,在本例中是 "Booklist.txt"。问题是我不断收到 java.lang.NumberFormatException 错误。文本文件由 44 行组成,第一行是一个数字,第二行是书名,第三行也是一个数字,依此类推。我试图创建一个 reader 来检查行号是偶数还是奇数,并根据它将该行文本添加到整数数组列表或字符串数​​组列表中。数字的整数数组列表和书名的字符串数组列表。我还尝试通过创建一个计数器来跟踪行号,该计数器在每次读取一行时加 1。

非常感谢任何帮助,提前致谢。

你"throw away"第一行。因此,您首先获得第一个标题,而不是第一个数字。您应该只使用 1 个循环,而不是 while 循环和 for 循环:

String line;
while ((line = br.readLine()) != null ){
    referenceNom.add(Integer.parseInt(line));
    bookTitle.add(br.readLine());                 
}

for (int count = 1; count <= 44; count++){
     if (count % 2 == 1){
         referenceNom.add(Integer.parseInt(br.readLine()));
     } else {
         bookTitle.add(br.readLine());
     }
 }

应该可以。

int count = 0;
String line = null;
while (line = (br.readLine() != null)) {
    if (count % 2 == 0) {
        referenceNom.add(Integer.parseInt(line));
    } else {
        bookTitle.add(line);
    }
    count++;
}

如有不明之处请告诉我。

首先,将读取的行存储在变量

String line=br.readLine();

然后你可以使用一个Try-Cach来识别那种值,所以你的代码可能是这样的:

String line=null;
while ((line=br.readLine()) != null ){
         try{
              referenceNom.add(Integer.parseInt(line));
              System.out.print(referenceNom.get(count));
         }catch(java.lang.NumberFormatException e){
             bookTitle.add(line);
             System.out.print(bookTitle.get(count));
        }catch(Exception e){
            //Unexpected Exception
            e.printStackTrace();
        }                                     
    }

像这样,行数可能多于或少于 44 行,您无需更改代码