EOFException - 如何处理?

2023-12-07

我是一名初学者 Java 程序员,遵循java教程.

我正在使用一个简单的 Java 程序Java教程's 数据流页面,并且在运行时,它不断显示EOFException。我想知道这是否正常,因为读者最终必须到达文件的末尾。

import java.io.*;

public class DataStreams {
    static final String dataFile = "F://Java//DataStreams//invoicedata.txt";

    static final double[] prices = { 19.99, 9.99, 15.99, 3.99, 4.99 };
    static final int[] units = { 12, 8, 13, 29, 50 };
    static final String[] descs = {
        "Java T-shirt",
        "Java Mug",
        "Duke Juggling Dolls",
        "Java Pin",
        "Java Key Chain"
    };
    public static void main(String args[]) {
        try {
            DataOutputStream out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(dataFile)));

            for (int i = 0; i < prices.length; i ++) {
                out.writeDouble(prices[i]);
                out.writeInt(units[i]);
                out.writeUTF(descs[i]);
            }

            out.close(); 

        } catch(IOException e){
            e.printStackTrace(); // used to be System.err.println();
        }

        double price;
        int unit;
        String desc;
        double total = 0.0;

        try {
            DataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream(dataFile)));

            while (true) {
                price = in.readDouble();
                unit = in.readInt();
                desc = in.readUTF();
                System.out.format("You ordered %d" + " units of %s at $%.2f%n",
                unit, desc, price);
                total += unit * price;
            }
        } catch(IOException e) {
            e.printStackTrace(); 
        }

        System.out.format("Your total is %f.%n" , total);
    }
}

它编译得很好,但输出是:

You ordered 12 units of Java T-shirt at $19.99
You ordered 8 units of Java Mug at $9.99
You ordered 13 units of Duke Juggling Dolls at $15.99
You ordered 29 units of Java Pin at $3.99
You ordered 50 units of Java Key Chain at $4.99
java.io.EOFException
        at java.io.DataInputStream.readFully(Unknown Source)
        at java.io.DataInputStream.readLong(Unknown Source)
        at java.io.DataInputStream.readDouble(Unknown Source)
        at DataStreams.main(DataStreams.java:39)
Your total is 892.880000.

来自Java教程's 数据流页面, 它说:

请注意,DataStreams 通过捕获来检测文件结束条件EOF异常,而不是测试无效的返回值。 DataInput 方法的所有实现都使用 EOFException 而不是返回值。

那么,这是否意味着捕获EOFException是正常的,所以只捕获它而不处理它就可以了,这意味着到达了文件末尾?

如果这意味着我应该处理它,请告诉我如何处理。

EDIT

根据建议,我已经使用它修复了它in.available() > 0为了while循环条件。

或者,我无能为力来处理异常,因为它很好。


从文件中读取时,您不会终止循环。所以它读取了所有的值并且正确地在以下行的读取的下一次迭代中抛出 EOFException:

 price = in.readDouble();

如果您阅读文档,它会说:

Throws:

EOFException - 如果此输入流在读取八个字节之前到达末尾。

IOException - 流已关闭,并且所包含的输入流不支持关闭后读取,或者发生另一个 I/O 错误。

在 while 循环中放置适当的终止条件来解决问题,例如以下:

     while(in.available() > 0)  <--- if there are still bytes to read
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EOFException - 如何处理? 的相关文章

  • 使用 GWT CellTableBuilder 构建树表

    Is it possible to build a tree table like this http www sencha com examples ExamplePlace basictreegrid with the new Cell
  • “_加载小部件时出现问题”消息

    加载小部件时 如果找不到资源或其他内容 则会显示 加载小部件时出现问题 就这样 惊人的 此消息保留在主屏幕上 甚至没有说明加载时遇到问题的小部件 我通过反复试验弄清楚了这一点 但我想知道发生这种情况时是否有任何地方可以找到错误消息 Andr
  • 添加动态数量的监听器(Spring JMS)

    我需要添加多个侦听器 如中所述application properties文件 就像下面这样 InTopics Sample QUT4 Sample T05 Sample T01 Sample JT7 注意 这个数字可以多一些 也可以少一些
  • 如何在spring mvc中从控制器名称+操作名称获取映射的URL?

    是否有现有的解决方案可以从 Spring MVC3 中的 控制器名称 操作名称 获取映射的 URL 例如 asp net mvc 或 Rails 中的 UrlHelper 我觉得非常有用 thx 也许 你想要这样的东西 in your Co
  • 如何使用 SimpleDateFormat 解析多种格式的日期

    我正在尝试解析文档中的一些日期 用户似乎以类似但不完全相同的格式输入了这些日期 以下是格式 9 09 9 2009 09 2009 9 1 2009 9 1 2009 尝试解析所有这些内容的最佳方法是什么 这些似乎是最常见的 但我想让我困扰
  • 在文本文件中搜索单词并返回其频率

    如何在包含单词文本的文本文件中搜索特定单词并返回其频率或出现次数 使用扫描仪 String text Question how to search for a particular word in a text file containin
  • 使用 RecyclerView 适配器在运行时更改布局屏幕

    我有两个布局文件 如下所示 如果列表中存在数据 则我显示此布局 当列表为空时 我会显示此布局 现在我想在运行时更改布局 当用户从列表中删除最后一项时 我想将布局更改为第二张图片中显示的 空购物车布局 In getItemCount Recy
  • Java套接字:在连接被拒绝异常时重试的最佳方法?

    现在我正在这样做 while true try SocketAddress sockaddr new InetSocketAddress ivDestIP ivDestPort downloadSock new Socket downloa
  • 记录骆驼路线

    我的项目中有几个 Camel 上下文 如果可能的话 我想以逆向工程方式记录路线 因为我们希望保持与上下文相关的文档最新 最好的方法是什么 我们倾向于预先实际设计路线 并使用来自EIP book http www eaipatterns co
  • 在java中实现你自己的阻塞队列

    我知道这个问题之前已经被问过并回答过很多次了 但我只是无法根据互联网上找到的示例找出窍门 例如this http tutorials jenkov com java concurrency blocking queues html or t
  • 将表值参数与 SQL Server JDBC 结合使用

    任何人都可以提供一些有关如何将表值参数 TVP 与 SQL Server JDBC 一起使用的指导吗 我使用的是微软提供的6 0版本的SQL Server驱动程序 我已经查看了官方文档 https msdn microsoft com en
  • 为什么在 Python 2.4 中使用 Unicode 数据会出现 ASCII 编码错误,而在 2.7 中却不会?

    我有一个程序 当在 Python 2 7 中运行时 会生成正确的 Unicode 输出到标准输出 当在 Python 2 4 中运行时 我得到UnicodeEncodeError ascii codec can t encode chara
  • Git 无法识别重命名和修改的包文件

    我有一个名为的java文件package old myfile java 我已经通过 git 提交了这个文件 然后我将我的包重命名为new所以我的文件在package new myfile java 我现在想将此文件重命名 和内容更改 提交
  • 如何记录来自 Akka (Java) 的所有传入消息

    在 Scala 中 您可以使用 LoggingReceive 包装接收函数 如何通过 Java API 实现相同的目标 def receive LoggingReceive case x do something Scala API 有Lo
  • 对象锁定私有类成员 - 最佳实践? (爪哇)

    I asked 类似的问题 https stackoverflow com questions 10548066 multiple object locks in java前几天 但对回复不满意 主要是因为我提供的代码存在一些人们关注的问题
  • JVM:是否可以操作帧堆栈?

    假设我需要执行N同一线程中的任务 这些任务有时可能需要来自外部存储的一些值 我事先不知道哪个任务可能需要这样的值以及何时 获取速度要快得多M价值观是一次性的而不是相同的M值在M查询外部存储 注意我不能指望任务本身进行合作 它们只不过是 ja
  • 挂钩 Eclipse 构建过程吗?

    我希望在 Eclipse 中按下构建按钮时能够运行一个简单的 Java 程序 目前 当我单击 构建 时 它会运行一些 JRebel 日志记录代码 我有一个程序可以解析 JRebel 日志文件并将统计信息存储在数据库中 是否可以编写一个插件或
  • Hibernate 和可序列化实体

    有谁知道是否有一个框架能够从实体类中剥离 Hibernate 集合以使它们可序列化 我查看了 BeanLib 但它似乎只进行实体的深层复制 而不允许我为实体类中的集合类型指定实现映射 BeanLib 目前不适用于 Hibernate 3 5
  • System.Runtime.InteropServices.COMException(0x80040154):[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在 C 项目中遇到异常 System Runtime InteropServices COMException 0x80040154 检
  • Android 和 Java 中绘制椭圆的区别

    在Java中由于某种原因Ellipse2D Double使用参数 height width x y 当我创建一个RectF在Android中参数是 left top right bottom 所以我对适应差异有点困惑 如果在 Java 中创

随机推荐

  • 用文本填充画布形状

    我想弄清楚如何将文本添加到画布形状 例如这是我的Code var text 5 text to display over the circle context fillStyle red context beginPath context
  • 将文本放在字体很棒的图标上方?

    如何在 font Awesome 图标上方水平和垂直居中文本 示例代码 div i class icon circle i span text span div 只需将 display table cell vertical align m
  • 为什么 mktime 为我的 std::tm 返回 -1

    我有一个std tm看起来是正确的 然而 当标准化时mktime我看到一个 1 根据man mktime The mktime function returns the specified calendar time if the cale
  • PHP 源代码控制服务器

    我有一个基于 PHP 的源代码控制 服务器 与 SVN 客户端兼容 我想将 SVN 托管在我的托管服务器上 但是当前主机不允许我启动任何进程或安装任何软件 你可以尝试 http sourceforge net projects deltaw
  • 文件修订可疑行为?

    今天似乎出现了 GoogleDrive 非本机文件修订版的新问题 几个月来 我们已经通过 Google Drive API 从 C 应用程序成功更新了 Google Drive 帐户中的现有文档 有些文件有 40 60 甚至超过 100 个
  • 如何通过用户id显示数据库中的记录

    我想按用户 ID 显示数据库中的记录 这意味着员工必须输入员工ID和密码并提出新项目的请求 并且该请求将被保存在数据库中 该请求工作正常 但在 request php 页面之后 我想在receipt php 中显示该员工订购的商品 我怎么能
  • IBM Watson - 对话 API 集成返回“未找到资源”错误 (404)

    我正在尝试集成来自 salesforce 的 Watson Http Callout 并收到 404 错误 然后我尝试使用 Postman 工具进行相同的操作 但得到相同的结果 在请求标头中添加了对话凭据 请求端点 https gatewa
  • Python:Selenium xpath 查找具有不区分大小写字符的元素?

    我有能力做到这一点 search View List driver find elements by xpath text normalize space s parent search 但我需要它忽略并将所有元素与文本匹配 例如 VieW
  • iOS Core Plot CPTAxisLabel 与 CTPlot 对齐

    请看下面这张图片 我已附上文件 我的问题是CPTAxisLabel标签 它们被放置在勾号下方 但不被放置在CPTPlot如我所愿 如何向该标签添加左偏移量 我需要将我的标签放置在中间CPTPlot object 更新 void config
  • 如何编写中间带有参数的 PowerShell 别名?

    我正在尝试设置 Windows PowerShell 别名来使用某些参数运行 MinGW 的 g 可执行文件 但是 这些参数需要位于文件名和其他参数之后 我不想经历尝试设置函数之类的麻烦 有没有一种方法可以简单地说 alias mybuil
  • 如何使两种不兼容的类型,但具有相同的成员,可以互换?

    昨天 我们团队中的两个人来找我 提出了一个不常见的问题 我们正在我们的 winforms 应用程序之一中使用第三方组件 所有代码都已经针对它编写了 然后 他们希望将同一供应商提供的另一个第三方组件合并到我们的应用程序中 令他们高兴的是 他们
  • swift tableview如何选择所有行

    我在表格视图中有按钮 我想当我按下该按钮时将选择所有单元格行 该怎么做 我尝试了很多但一无所获 我很困惑如何让按钮接触细胞 我试图让 var 像这样 var x false 那我确实喜欢 if x true Code 当你按下按钮时它就会是
  • 使用 Python 解析文件中的嵌套循环

    目前Python读取文件的每一行并执行一个函数doStep 该函数将传递正在读取的行上的任何内容 data txt a b c b read py fin open data txt for step in fin doStep step
  • Android Wear:收听传入通知

    是否可以在可穿戴 Android 应用程序中监听传入通知 我尝试过实施一个通知监听服务 但是服务的onNotificationPosted 从未被称为 public class MyListenerService extends Notif
  • 如何将应用提交到应用商店?

    我最近制作了我的第一个 iPhone 应用程序 我对 iPhone 编程完全陌生 如何将应用提交到应用商店 因为我是菜鸟 所以我会得到一些详细解释的更好帮助 您可以在中找到详细的解释iOS 开发者计划用户指南
  • 使用 Writer 将 int 写入文本文件

    Writer wr new FileWriter 123 txt wr write 123 wr close 输出文件包含 哪里有问题 怎么写int到文本文件使用Writer 你必须写字符串 你可以试试 wr write 123 OR wr
  • 从 PHP 5.3 开始,mssql_connect 不再工作

    我刚刚收到我们主机的一封电子邮件 他们已将 PHP 升级到 5 3 但不幸的是 所有脚本现在都已损坏 我追踪到了这个函数mssql 连接失败 支持人员告诉我 这在 5 3 中已被弃用 这怎么可能是真的 现在如何在 PHP 5 3 下连接到
  • 如何解决GCC中的包含文件名冲突?

    我有两个名为string h在不同的库中 它们相互冲突 甚至与标准C包含文件的同名冲突 无需使用任何string h除了标准的 但我需要在 GCC 搜索路径中包含库头路径 目前我使用类似的东西 I usr local include lib
  • 如何调试 dsymutil 错误:“Clang 模块预计只有 1 个编译单元。”

    在 iOS 应用程序的GenerateDSYMFile 阶段收到此错误消息 Users name Library Developer Xcode DerivedData ModuleCache HASH FrameworkName HASH
  • EOFException - 如何处理?

    我是一名初学者 Java 程序员 遵循java教程 我正在使用一个简单的 Java 程序Java教程 s 数据流页面 并且在运行时 它不断显示EOFException 我想知道这是否正常 因为读者最终必须到达文件的末尾 import jav