Java2实用教程第五版+第十章习题答案

这是《Java2实用教程第五版》的试题答案,需要的同学评论关注加点赞

有问题可以在评论区提出

IMG_20210308_172835

1.问答题
(1)如果准备按字节读取一个文件的内容,应当使用FileInputStream流还是FileReader流?

使用FileInputStream。

(2)FileInputStream流的read方法和FileReader流的read方法有何不同?

FileInputStream按字节读取文件,FileReader按字符读取文件。

(3)BufferedReader流能直接指向一个文件吗?

不可以。

(4)

(5)

2.选择题
(1)下列哪个叙述是正确的?
A. 创建File对象可能发生异常。
B. BufferedRead流可以指向FileInputStream流
C. BufferedWrite流可以指向FileWrite流
D.RadomAccessFile流一旦指向文件,就会刷新该文件

答案:C
创建File对象不会发生异常,创建新文件的时候会发生IOException异常。
BufferedRead流只能指向FileRead流,它们都是以字符读取数据的。
RadomAccessFile流指向文件时,不刷新文件。

(2)为了向文件hello.txt尾加数据,下列哪个是正确创建指向hello.txt的流?

A. 
try { 
	OutputStream out = new FileOutputStream(“hello.txt”);
}catch(IOException e){

}

B. 
try { 
	OutputStream out = new FileOutputStream(“hello.txt”,true);
}catch(IOException e){

}

C.
try { 
	OutputStream out = new FileOutputStream(“hello.txt”,false);
}catch(IOException e){

}

D.
try { 
	OutputStream out = new OutputStream(“hello.txt”,true);
}catch(IOException e){

}

答案:B
FileOutputStream类是文件字节输出流,它是OutputStream类的子类,所以FileOutputStream的实例方法都是从OutputStream类继承来的,那么在这道题中需要使用上转型对象才能调用重写父类的方法,排除D。ABC在于FileOutpurStream的构造方法的不同,题目要求向文件尾加数据,A选项是具有刷新功能的构造方法,也就是会覆盖掉原来文件的数据,B选项参数为true表示不会刷新所指向的文件,而是从文件的末尾开始向文件写入数据,取值为false,输出流将刷新所指向的文件。

3.阅读程序题

(1)

(2)请说出E类中标注的【代码1】~【代码4】的输出结果。

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class E {
    public static void main(String args[]) {
        int n = -1;
        File f = new File("hello.txt");
        byte[] a = "abcd".getBytes();
        try {
            FileOutputStream out = new FileOutputStream(f);
            out.write(a);
            out.close();
            FileInputStream in = new FileInputStream(f);
            byte[] tom = new byte[3];
            int m = in.read(tom, 0, 3);
            System.out.println(m);          //【代码1】
            String s = new String(tom, 0, 3);
            System.out.println(s);            //【代码2】
            m = in.read(tom, 0, 3);
            System.out.println(m);            //【代码3】
            s = new String(tom, 0, 3);
            System.out.println(s);            //【代码4】
        } catch (IOException e) {

        }
    }

}

答案:【代码1】:3。【代码2】:abc。【代码3】:1。【代码4】:dbc。

getBytes方法将此字符串编码为字节序列,将结果存储到新的字节数组中,之后用输出流将字节数组a中的内容写入到了文件hello.txt中;之后声明一个新的byte数组com大小为3个字节,使用输入流的read方法,从数组com的第0个位置开始,依次从文件中读取3个字节写入数组中,返回实际读取的字节数目。所以【代码1】输出3;之后用声明一个String对象,使用了带三个参数的构造方法,从字节数组的第0个位置开始,提取出3个字节创建一个新的String对象;那么【代码2】输出的结果就是abc,只要不关闭流,每次调用read方法就顺序地读取源中其余的内容,直到源的末尾或流被关闭。
所以再次调用read方法只读取了剩余的一个字符d写入到tom数组的第0个位置上,返回实际读取的字节数目为1,所以【代码3】返回1,此时再新声明一个String对象,还是从tom的第0个位置开始提取3个字节,那么输出的结果就应该是dbc。

(3)

4.编程题

(1)使用RandomAccessFIle流将一个文本文件倒置读出

(2)使用Java的输入、输入流将一个文本文件的内容按行读出,每读出一行就顺序添加行号,并写入到另一个文件中

(3)参考例子16,解析一个文件中的加个数据,并计算平均价格,该文件的内容如下

商品列表:

电视机,2567元/台

洗衣机,3562元/台

冰箱,6573元/台

  • 19
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值