简体   繁体   English

如何通过循环从datainputstream读取整个数据

[英]how to read whole data from datainputstream by a loop

I've just started to work with data files in java and I don't know how to define loop to read whole file, not only a single line. 我刚刚开始使用Java处理数据文件,而且我不知道如何定义循环以读取整个文件,而不仅仅是一行。 I'm absolutely not sure am I thinking correctly:: 我绝对不确定我的想法是否正确::

public static void main(String[] args) throws IOException {
    DataInputStream dis = new DataInputStream(new FileInputStream("data.dat"));
    String name = null;
    do  {
        name = dis.readUTF();
        System.out.println(name);
    } while (!name.equals(null));
    dis.close();
}

When I'm trying this way, it shows me exactly what I want but with this kind of error: 当我尝试这种方式时,它会确切地显示我想要的东西,但是会出现这种错误:

szampon 8.80 120 szampon 8.80 120

Exception in thread "main" java.io.EOFException 线程“主”中的异常java.io.EOFException

zel 9.23 300 面板9.23 300

pasta 12.99 140 at java.base/java.io.DataInputStream.readUnsignedShort(DataInputStream.java:345) at java.base/java.io.DataInputStream.readUTF(DataInputStream.java:594) at java.base/java.io.DataInputStream.readUTF(DataInputStream.java:569) at com.company.Main.main(Main.java:13) Pasta 12.99 140 at java.base / java.io.DataInputStream.readUnsignedShort(DataInputStream.java:345)at java.base / java.io.DataInputStream.readUTF(DataInputStream.java:594)at java.base / java.io com.company.Main.main(Main.java:13)上的DataInputStream.readUTF(DataInputStream.java:569)

Process finished with exit code 1 流程以退出代码1完成

Make this change 进行更改

public static void main(String[] args) throws IOException {
DataInputStream dis = new DataInputStream(new FileInputStream("data.dat"));
String name = null;
do  {
    name = dis.readUTF();
    System.out.println(name);
} while ( dis.available() > 0);
dis.close();
}

The readUTF method will not return null , so you need to check if there any bytes available to read. readUTF方法不会返回null,因此您需要检查是否有任何字节可读取。

hope this will help you @Pawel 希望这会对您有帮助@Pawel

DataInputStream dis = new DataInputStream(new FileInputStream("data.dat"));
StringBuffer inputLine = new StringBuffer();
String tmp;
while ((tmp = dis.readLine()) != null) {
     inputLine.append(tmp);
     System.out.println(tmp);
}
dis.close();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM