在循环时重置Java

时间:2015-10-07 09:45:10

标签: java

我目前有2个循环,一个获取时间戳,另一个循环根据该时间戳查找映射信息并以某种方式输出。

我遇到的问题是我正在循环浏览文本,并希望它在isdone =" N"时再次从头开始读取文件。然而,对于第二个循环,情况似乎并非如此。

到目前为止

代码:

public static void organiseFile() throws FileNotFoundException {
    String            directory = "C:\\Users\\xxx\\Desktop\\Files\\ex1";
    Scanner           fileIn    = new Scanner(new File(directory + "_temp.txt"));
    Scanner           readIn    = new Scanner(new File(directory + ".txt"));
    PrintWriter       out       = new PrintWriter(directory + "_ordered.txt");
    ArrayList<String> lines     = new ArrayList<String>();

    String readTimeStamp     = "";
    String timeStampMapping  = "";
    String outputFirst       = "";
    String outputSecond      = "";
    String outputThird       = "";
    String previousTimeStamp = "";
    String doneList          = "";
    String isdone            = "";

    int counter = 1;

    // Loop to get time stamps
    while(fileIn.hasNextLine()) {
        readTimeStamp = fileIn.nextLine();

        if(readTimeStamp != null && readTimeStamp.trim().length() > 0) {
            readTimeStamp = readTimeStamp.substring(12, 25);
            System.out.println(readTimeStamp);

            // Previous time stamp found, no need to loop through it again
            if(doneList.contains(readTimeStamp))
                isdone = "Y";

            // Counter in place to stop outputting the first record, otherwise output file and clear variables down
            else if(!previousTimeStamp.equals(readTimeStamp) && counter > 1) {
                out.println(outputFirst + outputSecond + outputThird);  
                System.out.println("Outputting....");
                outputFirst  = "";
                outputSecond = "";
                outputThird  = "";
                counter      = 1;
            }

            // New time stamp found, start finding values in second loop
            else
                isdone = "N";

            // Secondary loop to find match of record
            while(readIn.hasNextLine() && isdone.equals("N")) {
                System.out.println("Mapping...");
                timeStampMapping = readIn.nextLine();
                System.out.println(timeStampMapping);

                // When a record has been found with matching time stamps, start ordering
                if(timeStampMapping.contains(readTimeStamp)) {
                    previousTimeStamp = readTimeStamp;
                    System.out.println(previousTimeStamp);

                    if(timeStampMapping.contains("[EVENT=agentStateEvent]")) {
                        outputFirst += timeStampMapping + "\r\n";
                    } else if(timeStampMapping.contains("[EVENT=TerminalConnectionCreated]")) {
                        outputSecond += timeStampMapping + "\r\n";
                    } else {
                        outputThird += timeStampMapping + "\r\n";
                        doneList    += readTimeStamp + ",";
                    }

                    counter++;
                }
            }
        }
    }

    System.out.println("Outputting final record");
    out.println(outputFirst + outputSecond + outputThird);
    System.out.println("Complete!");
    out.close();
}

1 个答案:

答案 0 :(得分:3)

您可以使用Scanner.reset()将其重置为文件的开头。例如,在您的第二个while循环包括:

之后
if (isdone.equals("Y")) {
    fileIn.reset();
}

顺便说一下:你为什么使用String代替isdone