Java,需要一个while循环来实现eof。 iewhile!eof,继续解析

时间:2013-06-05 16:37:07

标签: java while-loop eof datainputstream

我目前有一个有效的解析器。它解析一次文件(不是我想要它做的),然后将解析后的数据输出到文件中。我需要它来保持解析并附加到相同的输出文件,直到输入文件的末尾。看起来像这样。

try {
// my code parsing the data and appending to eof of output. (works)
}
catch (EOFException eof){
}

除了while循环外,一切都已完成。它只在我需要时解析一次才能继续解析。我正在寻找一个while循环函数来达到eof。

我也在使用DataInputStream。是否有某种DataInputStream.hasNext函数?

DataInputStream dis = new DataInputStream(new FileInputStream(inFile));
i.e. dis.read();

//Need a while !eof while loop
try {
// my code parsing the data and appending to eof of output. (works)
}
catch (EOFException eof){
}

3 个答案:

答案 0 :(得分:7)

除了在抛出EOFException之前循环,您可以采用更清晰的方法,并使用available()

DataInputStream dis = new DataInputStream(new FileInputStream(inFile));
while (dis.available() > 0) {
    // read and use data
}

或者,如果您选择采用EOF方法,则需要在捕获的异常时设置一个布尔值,并在循环中使用该布尔值,但我不推荐它:

DataInputStream dis = new DataInputStream(new FileInputStream(inFile));
boolean eof = false;
while (!eof) {
    try {
        // read and use data
    } catch (EOFException e) {
        eof = true;
    }
}

答案 1 :(得分:3)

DataInputStream有很多readXXX()方法会抛出EOFException,但您使用的方法DataInputStream.read() 不会 抛出EOFException

使用read()实现while循环时,要正确识别EOF,如下所示

int read = 0;
byte[] b = new byte[1024];
while ((read = dis.read(b)) != -1) { // returns numOfBytesRead or -1 at EOF
  // parse, or write to output stream as
  dos.write(b, 0, read); // (byte[], offset, numOfBytesToWrite)
}

答案 2 :(得分:0)

如果您使用FileInputStream,则此处为具有名为fis的FileInputStream成员的类的EOF方法。

public boolean isEOF() 
{ 
    try { return fis.getChannel().position() >= fis.getChannel().size()-1; } 
    catch (IOException e) { return true; } 
}