循环未到达文件末尾的问题 - Java

时间:2017-05-01 21:51:54

标签: java loops file-handling

我正在为学校做Java任务。分配是处理读取第一个文件的2个文件,使用第二个文件对第一个文件进行调整,最后输出到新文件中。

    Scanner inputRecords = new Scanner(new File("Records.txt"));
    Scanner inputTransactions = new Scanner(new File("Transactions.txt"));
    BufferedWriter outputFile = (new BufferedWriter(new FileWriter("NewRecords.txt", true)));
    char code; // transaction code
    String lineTran = "";
    String lineRecord = "";
    String midS = "";
    String tidS = "";
    int tid = 0,  mid= 0;
    for (int x = 0; x < 6; x++)
    {
        lineTran = inputTransactions.nextLine();                
        code = lineTran.charAt(0);
        System.out.println(code);
        tidS = lineTran.substring(2,11);            
        tid = Integer.parseInt(tidS);
        lineRecord = inputRecords.nextLine();
        midS = lineRecord.substring(0,9);
        mid = Integer.parseInt(midS);
        if (mid < tid) // add a new record lineTran.substring(2,lineTran.length()
        {
            outputFile.write(lineRecord);
            outputFile.newLine();
            lineRecord = inputRecords.nextLine();
        }
        else if (mid == tid )
        {
            if (code == 'C') //change record
            {
                outputFile.write(lineTran.substring(2,lineTran.length()));
                outputFile.newLine();
                lineTran = inputTransactions.nextLine();
            }
            else if (code == 'D') //delete record
            {
                lineTran = inputTransactions.nextLine();
                lineRecord = inputRecords.nextLine();
            }
            else // add error
            {
                System.out.println(lineRecord + " Already Exists...add error");
                lineTran = inputTransactions.nextLine();
            }
        }
        else
        {
                if (code == 'A') // add record
                {
                    outputFile.write(lineTran.substring(2,lineTran.length()));
                    outputFile.newLine();
                    lineTran = inputTransactions.nextLine();
                }
                else if (code == 'C') // change error
                {
                    System.out.println(lineRecord + " Record already exist...Change Error");
                    lineTran = inputTransactions.nextLine();
                }
                else // delete error 
                {
                    System.out.println(lineRecord + " Record does not exist...delete error");
                    lineTran = inputTransactions.nextLine();
                }
        }

请注意: Records.txt有10行信息(例如:######### lastname firstname职业) Transactions.txt有6行信息(例如:&#39; A,D或C&#39; ######### lastname firstname职业)

我遇到的问题是无论循环的类型如何,我都会遇到2个延迟中的一个。 1)在上面的for循环的情况下

d 一个 C 一个 C 386326383 Slim Kan personalTrainer未找到任何更改...更改错误

线程中的异常&#34; main&#34; java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:0     在java.lang.String.charAt(未知来源)     在fileHandling.main(fileHandling.java:26) 是结果,没有写入文件。

2)如果我通过x&lt; 5运行循环程序运行正常,但跳过最后一次交易。

我试过&#34;做什么&#34; &#34;而&#34;而&#34;循环,但只有类似的结果。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

if条件下,您已分配lineTran = inputTransactions.nextLine();,然后在for循环的顶部再次分配。意味着你每个循环都会忽略1行。因此,在事务文件中你有6行,那么你循环将运行比文件中的行数更多的循环,因为你已经读取.nextLine()多于行数。