使用java获取文件的第一行

时间:2013-02-19 22:00:52

标签: java file

我正在尝试使用java获取文件的第一行,我不确定它为什么不工作或为什么我收到错误。这是我第一次在java中尝试过这个。

错误

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 16
    at getSum.main(getSum.java:33)

代码

import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.File;
import java.io.FileNotFoundException;
public class getSum {

    public static void main(String[] args) {
            File file = new File("path/InputArray.txt");
            FileInputStream fis = null;
            BufferedInputStream bis = null;
            DataInputStream dis = null;
            String line = null;
            try{
                fis = new FileInputStream(file);
                bis = new BufferedInputStream(fis);
                dis = new DataInputStream(bis);

                while(dis.available() != 0){
                    line = dis.readLine();
                }
            }catch (FileNotFoundException e){
                e.printStackTrace();
            }catch (IOException e){
                e.printStackTrace();
            }
            String[] splitLine = line.split("\\s+");
            int[] numbers = new int[splitLine.length];

            for(int i = 0; i< line.length(); i++){
                try{
                    numbers[i] = Integer.parseInt(splitLine[i]);
                }catch(NumberFormatException nfe){};
            }


           int amount = 0;
           System.out.print(numbers.length);
           /*amount = sumArray(0,numbers.length,numbers.length,numbers);
           System.out.print("Total: " + amount);*/
    }

2 个答案:

答案 0 :(得分:5)

看看这个:

int[] numbers = new int[splitLine.length];
for(int i = 0; i< line.length(); i++){
    try{
        numbers[i] = Integer.parseInt(splitLine[i]);
    }catch(NumberFormatException nfe){};
}

您使用的i从0到line.length() ...与splitLine.length不同。我怀疑你的意思是:

for (int i = 0; i< splitLine.length; i++) {

此时,由于numberssplitLine的长度相同,您绝对不会获得ArrayIndexOutOfBoundsException

答案 1 :(得分:0)

我认为你的for循环条件是错误的。我认为你应该检查splitLine.length()。

for(int i = 0; i< splitLine.length(); i++){
     try{
          numbers[i] = Integer.parseInt(splitLine[i]);
     }catch(NumberFormatException nfe){};
}