读取txt文件无法正常工作

时间:2013-06-03 20:16:10

标签: java

我正在使用这种方法

static void readFile()
    {
        try
        {
            FileInputStream fstream = new FileInputStream( "Insurances.txt" );
            BufferedReader br = new BufferedReader( new InputStreamReader( fstream ) );
            String strLine;
            String [] array;
            while ( ( strLine = br.readLine() ) != null )
            {
                array = strLine.split( "," );
                pword++;
                int type = Integer.parseInt(array[0]);
                int tm = Integer.parseInt(array[1]);
                int year = Integer.parseInt(array[2]);
                int month = Integer.parseInt(array[3]);
                int day = Integer.parseInt(array[4]);
                int pass = Integer.parseInt(array[5]);
                double tc = 0;
                if ( type==2 )
                {
                    String man = array[6];
                    String mod = array[7];
                    int cc = Integer.parseInt(array[8]);
                    String lp = array[9];
                    String ex = array [10];
                    boolean extra;
                    if ( ex.equals("true") )
                    {
                        extra = true;
                    }
                    else
                    {
                        extra = false;
                    }
                    insurances[insur] = new CarInsurance( pword, type, tm, year, month, day, pass, tc, man, mod, cc, lp, extra  );
                    tc = insurances[insur].calculateCost( pass, a, insur );
                    insurances[insur].setCost( tc );
                    insur++;
                }
                else
                {
                    insurances[insur] = new LifeInsurance( pword, type, tm, year, month, day, pass, tc );
                    tc = insurances[insur].calculateCost( pass, a, insur );
                    insurances[insur].setCost( tc );
                    insur++;
                }
                System.out.println("y");
            }
            inp.close();
        }
        catch ( Exception e )
        {
            e.getMessage();
        }
    }

从txt文件中读取一些信息并创建LifeInsurance类或CarInsurance的对象。我使用这个System.out.println("y");的原因是看它是否完成了与我想要创建的对象一样多的循环。当我尝试运行我的程序时,我只得到7个循环(7年),但我需要13.以下是我在txt文件上写的:

1,12,2013,6,1,1939

2,12,2008,1,10,1939,奔驰,E200,2000,AEX32100,假

2,12,2009,1,11,1939,奔驰,E200,2000,AEX32100,假

2,12,2009,2,10,1940,菲亚特,蓬,1400,BIO1245,假

2,12,2009,2,10,1940,座椅,伊维萨,1600,BIE3987,假

2,12,2010,1,10,1940,座椅,伊维萨,1600,BIE3987,假

2,12,2013,6,1,1941,奥迪,A4,1600,IXE1256,真

1,12,2008,1,2,1942

1,12,2009,1,2,1942

1,12,2010,1,2,1942

1,12,2011,1,2,1943

2,12,2010,7,23,1943,雷诺,克里奥,1400,ZIO3890,真

2,12,2011,7,23,1943,雷诺,克里奥,1400,ZIO3890,真

你能不能帮帮我,因为我找不到它没有完成所有13个循环的原因。提前谢谢。

3 个答案:

答案 0 :(得分:1)

您应该看到LifeInsurance类的第18行建议您的堆栈跟踪:

LifeInsurance.calculateCost上的java.lang.NullPointerException(LifeInsurance.java:18)

第8行的数据似乎在成本计算中会产生一些空值。

为了知道是不是来自不期望的数据类型或代码中的问题,你应该首先用第8行替换第1行,然后如果你不想尝试调试则逐个替换参数你的代码。

(对不起“答案”似乎我无法添加评论)

答案 1 :(得分:0)

我假设你在Insurances.txt的所有记录都在不同的行上,因为如果一个人仔细阅读,你的数据会有13个不同的记录。

您还应该关注@jlordo所说的内容并将e.getMessage()更改为e.printStackTrace()。通过这样做并运行代码,我得到了

话虽如此,您还应该修剪strLine.split(",")电话产生的所有字符串。例如(没有错误检查)使用此Integer.parseInt(array[0].trim())代替此Integer.parseInt(array[0])

通过修剪,我能够看到'y'打印13次。

答案 2 :(得分:-1)

如果您的输入文件没有13行,您将永远不会获得13个循环。您的程序应该一次读取一行。