Java,需要一个while循环来达到eof.即while !eof,继续解析



我目前有一个工作解析器。它解析文件一次(不是我想让它做的),然后将解析的数据输出到文件中。我需要它继续解析和追加到相同的输出文件,直到输入文件的末尾。看起来像这样。

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){
}

警告:此答案不正确。


与其循环直到抛出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;
    }
}

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

要在使用read()时正确识别EOF,请实现以下while循环

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)
}

如果您正在使用FileInputStream,这里有一个EOF方法,用于具有FileInputStream成员名为fis的类。

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

相关内容

  • 没有找到相关文章

最新更新