Java文件处理与递归解析

205、找出以下每段代码中的错误并说明如何修正。a) 假设已经声明了 account、company 和 amount。ObjectOutputStream outputStream; outputStream.writeInt( account ); outputStream.writeChars( company ); outputStream.writeDouble( amount ); b) 以下语句应从文件 “payables.txt” 中读取一条记录。Scanner 变量 inPayable 应用于引用该文件。Scanner inPayable = new Scanner( new File( “payables.txt” ) ); PayablesRecord record = ( PayablesRecord ) inPayable.readObject();

a) 错误:在尝试向流输出数据之前,文件未打开。
修正:通过创建一个包装 FileOutputStream 对象的新 ObjectOutputStream 对象来打开一个文件用于输出。

b) 错误: Scanner 类没有 readObject() 方法,不能用此方法读取对象。
修正:若要读取对象,应使用 ObjectInputStream
示例代码如下:

ObjectInputStream inPayable = new ObjectInputStream(new FileInputStream("payables.txt"));
PayablesRecord record = (PayablesRecord) inPayable.readObject();

206、在以下每个陈述的空白处填空:a) 计算机将大量数据以 _形式存储在二级存储设备上。b) 一个 由几个字段组成。c) 为了便于从文件中检索特定记录,每条记录中的一个字段被选作 _。d) 使用基于字节的流创建的文件被称为 _文件,而使用基于字符的流创建的文件被称为 _文件。e) 标准流对象是 _和 _。

  • a) 持久数据;
  • b) 记录;
  • c) 记录键;
  • d) 二进制,文本;
  • e) System.in,System.out,System.err

207、判断下列陈述哪些是正确的,哪些是错误的。如果错误,请说明原因。a) 计算机执行的令人印象深刻的功能本质上涉及对 0 和 1 的操作。b) 人们以字符形式指定程序和数据项。然后计算机将这些字符作为 0 和 1 的组合进行操作和处理。c) 计算机中表示的数据项形成一个数据层次结构,随着我们从字段到字符再到比特等逐步推进,数据项变得更大且更复杂。d) 记录键标识一个记录属于特定的字段。e) 公司将所有信息存储在一个文件中,以方便计算机处理信息。当程序创建一个文件时,计算机将保留该文件以供将来参考。

  • a) 正确。计算机执行的功能本质上是对 0 和 1 的操作。
  • b) 正确。人们用字符指定程序和数据,计算机将其处理为 0 和 1 的组合。
  • c) 错误。数据层次结构是从比特到字符再到字段等,数据项逐渐变大且更复杂,而不是从字段到字符到比特。
  • d) 错误。记录键标识一个记录属于特定的人或实体,而非特定的字段。
  • e) 错误。公司通常不会将所有信息存储在一个文件中,而是会根据不同的用途和类型存储在多个文件中。

208、编写一个完整的文件匹配应收账款程序。使用每个文件上的账户号码作为匹配的记录键。假设每个文件都是按账户号码递增顺序存储记录的顺序文本文件。定义类TransactionRecord。该类的对象包含一个账户号码和交易金额。提供修改和检索这些值的方法。在商业数据处理中,每个应用系统通常有多个文件。例如,在应收账款系统中,通常有一个主文件,包含每个客户的详细信息,如客户姓名、地址、电话号码、未结清余额、信用额度、折扣条款、合同安排,可能还有近期购买和现金支付的简要历史记录。当交易发生时(即进行销售和收到付款),有关交易的信息会录入一个文件。在每个业务周期结束时(有些公司是一个月,有些是一周,有些情况下是一天),交易文件(称为“trans.txt”)会应用到主文件(称为“oldmast.txt”)上,以更新每个账户的购买和支付记录。在更新过程中,主文件会重写为“newmast.txt”文件,然后在下一个业务周期结束时再次用于开始更新过程。文件匹配程序必须处理单文件程序中不会出现的某些问题。例如,匹配并不总是会发生。如果主文件上的某个客户在当前业务周期内没有进行任何购买或现金支付,那么该客户的记录不会出现在交易文件上。同样,进行了一些购买或现金支付的客户可能刚搬到这个社区,如果是这样,公司可能还没有机会为该客户创建主记录。

public class TransactionRecord {
    private int account;
    private double amount;

    // 无参构造函数
    public TransactionRecord() {
        this(0, 0.0);
    }

    // 有参构造函数
    public TransactionRecord(int account, double amount) {
        setAccount(account);
        setAmount(amount);
    }

    // 设置账户号码
    public void setAccount(int account) {
        this.account = account;
    }

    // 获取账户号码
    public int getAccount() {
        return account;
    }

    // 设置交易金额
    public void setAmount(double amount) {
        
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值