一、填空题
1.Java中的I/O流,按照传输数据的不同,可分为字节流和字符流。
2.java.io包中可以用于从文件中直接读取字符的是Reader类。
4.IO提供两个带缓冲的字节流,分别是BufferedInputStream和BufferedOutputStream。
4.在JDK中提供了两个类可以将字节流转换为字符流,它们分别是
InputStreamReader和OutputStreamWriter。
5.java.io.FileOutputStream是OutputStream的子类,它是操作文件的字节输出流。
二、判断题
1.转换流实现了字节流和字符流之间的互相转换。√
2.字节流只能用来读写二进制文件。(错)
3.JDK提供了两个抽象类InputStream和OutputStream,它们是字节流的顶级父类,所有的字节输入流都继承自OutputStream,所有的字节输出流都继承自InputStream。(错)
4.FileOutputStream是操作文件的字节输出流,专门用于把数据写入文件。(√)
5.使用字节流缓冲区读取数据相对一个字节一个字节的读取操作效率更低。(错)
三、选择题
1.下面关于字节流缓冲区的说法错误的是(A )
A、使用字节流缓冲区读写文件是一个字节一个字节的读写
B、使用字节流缓冲区读写文件时,可以一次性读取多个字节的数据
C、使用字节流缓冲区读写文件,可以大大的提高文件的读写操作
D、字节流缓冲区就是一块内存,用于存放暂时输入输出的数据
2.阅读下列代码
import java.io.*;
public class Example {
public static void main(String[] args) throws Exception {
FileInputStream in = new FileInputStream("itcast.txt");
int b = 0;
while (true) {
b = in.______;
if (b == -1) {
break;
}
System.out.println(b);
}
in.close()
}
}
下列选项中,填写在程序横线处的方法正确的是(A)
A、read() B、close() C、skip() D、available()
3.下列选项中,FileWriter类中read()方法读取到流末尾的返回值是( B )
A、0 B、-1 C、1 D、无返回值
4.在程序开发中,经常需要对文本文件的内容进行读取,如果想从文件中直接读取字符便可以使用字符输入流( C)
A、Reader B、Writer C、FileReader D、FileWriter
5.File类提供了一系列方法,用于操作其内部封装的路径指向的文件或者目录,当File对象对应的文件不存在时,使用哪个方法将新建的一个File对象指定到新文件中。( C )
A、String getAbsolutePath() B、boolean canRead()
C、boolean createNewFile() D、boolean exists()
简答题
1.简述字符流与字节流的区别。
字节流的两个基类是InputStream和OutputStream,字符流的两个基类是Reader和Writer,它们都是Object类的直接子类,字节流是处理以8位字节为基本单位的字节流类;Reader和Writer类是专门处理16位字节的字符流类。
2.简述InputStreamReader类与OutputStreamWriter类的作用。
InputStreamReader是Reader的子类,它可以将一个字节输入流转换成字符输入流,方便直接读取字符。OutputStreamWriter是Writer的子类,它可以将一个字节输出流转换成字符输出流,方便直接写入字符。
编程题
1. 编写一个程序,分别使用字节流和字符流拷贝一个文本文件。要求如下:
(1)使用FileInputStream、FileOutputStreaem和FileReader、FileWriter分别进行拷贝。
(2)使用字节流拷贝时,定义一个1024长度的字节数组作为缓冲区,使用字符流拷贝。
import java.io.*;
public class Example11 {
public static void main(String[]args)throws Exception{
//字节流拷贝
InputStream in=new FileInputStream("D:/src.txt");
OutputStream out=new FileOutputStream("D:/des.txt");
byte[] buf=new byte[1024];
int len;
while((len=in.read(buf))!=-1){
out.write(buf,0,len);
}
in.close();
out.close();
//字符流拷贝
BufferedReader bf=new BufferedReader(new FileReader("D:/src.txt"));
BufferedWriter bw=new BufferedWriter(new FileWriter("D:/des1.txt"));
String str;
while((str=bf.readLine())!=null)
{
bw.write(str);
bw.newLine();
}
bf.close();
bw.close();
}
}