textfile line reader- java

时间:2015-08-18 17:00:42

标签: java arraylist text-files bufferedreader

    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();
        }
    }

我正在尝试创建一个读取文本文件行的阅读器,在本例中为“Booklist.txt”。问题是我继续收到java.lang.NumberFormatException错误。文本文件由44行组成,第一行是数字,第二行是书名,第三行是数字,依此类推。我试图创建一个读取器,检查行号是偶数还是奇数,并根据这种情况将该行文本添加到整数arraylist或string arraylist。数字的整数arraylist和书名的字符串arraylist。此外,我试图通过创建一个计数器来跟踪行号,每次读取一行时,计数器都会加1。

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

3 个答案:

答案 0 :(得分:0)

你&#34;扔掉&#34;第一行。因此,您首先获得第一个标题,而不是第一个数字。你应该只使用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());
     }
 }

应该有效。

答案 1 :(得分:0)

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++;
}

如果有任何不清楚的地方,请告诉我。

答案 2 :(得分:0)

首先,将readed线存储在Variable

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行,你不需要改变你的代码