在千锋“逆战”学习第31天
每日一句:调试完一个动态连接函数,固然值得兴奋,但真正的成功远还在无数个函数之后。
今天学习的是IO流,
字节流InputStream/OutputStream,
节点流FileOutputStream/FileInputStream,
字节过滤流中的缓冲流BufferedOutputStream/BufferedInputStream和对象流ObjectOutputStream/ObjectInputStream。
明天继续努力。
作业
3.填空
对于FileInputStream来说,从方向上来分,它是输入流;数据单位上分,它是字符流;从功能上分,它是文件输入流。
--------------------------------------------------------------------------
4.填空
--------------------------------------------------------------------------
5.下面关于FileInputStream类型说法正确的是:
A. 创建FileInputStream对象是为了读取硬盘上的文件
B. 创建FileInputStream对象时,如果硬盘上对应的文件不存在,则抛出一个异常
C. 利用FileInputStream对象可以创建文件
D. FileInputStream对象读取文件时,只能读取文本文件
正确选项:
A B
--------------------------------------------------------------------------
6.填空
--------------------------------------------------------------------------
7.改错
public class TestFileInputStream {
public static void main(String[] args) {
FileInputStream fin = new FileInputStream("test.txt");
try {
System.out.println(fin.read());
fin.close();
} catch (Exception e) {
}
}
}
改错后
public class TestFileInputStream {
public static void main(String[] args) throws FileNotFoundException {
FileInputStream fin = new FileInputStream("test.txt");//手动抛出异常
try {
// System.out.println(fin.read());
while ((fin.read()) != -1) {
System.out.println(fin.read());
}
fin.close();
} catch (Exception e) {
}
}
}
--------------------------------------------------------------------------
8.利用FileInputStream和FileOutputStream完成
1)用FileOutputStream在当前目录下创建一个文件“test.txt”,并向文件输出“Hello World”,如果文件已存在,则在原有文件内容后面追加。
2)用FileInputStream读入test.txt文件,并在控制台打印出test.txt的内容
3)要求用try-catch-finally处理异常,并且关闭流放在finally中
public class Test08 {
public static void main(String[] args) throws IOException {
// 用FileOutputStream在当前目录下创建一个文件“test.txt”
FileOutputStream fos = new FileOutputStream("test.txt", true);
// 向文件输出“Hello World”
byte[] bytes = new byte[] { 72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100 };
fos.write(bytes);
// 用FileInputStream读入test.txt文件
FileInputStream fis = new FileInputStream("test.txt");
// 在控制台打印出test.txt的内容
while (true) {
try {
if (fis.read(bytes) != -1) {
for (int i = 0; i < bytes.length; i++) {
System.out.print((char) bytes[i] + " ");
}
System.out.println();
}
} catch (Exception e) {
break;
} finally {// 关闭流放在finally中
fos.close();
fis.close();
}
}
}
}
运行结果:
H e l l o W o r l d
--------------------------------------------------------------------------
13.填空
--------------------------------------------------------------------------
15.在PrintWriter中有一个print(Object obj),在ObjectOutputStream中有一个方法writeObject(Object obj),简述两个方法区别
print方法打印一个对象。 由String.valueOf(Object)方法生成的字符串根据平台的默认字符编码转换为字节,这些字节的write(int)的方式编写。打印一个对象。 由String.valueOf(Object)方法生成的字符串根据平台的默认字符编码转换为字节,这些字节的write(int)的方式编写。
writeObject将指定的对象写入ObjectOutputStream。 可以使用writeObject和readObject方法覆盖类的默认序列化。由该对象引用的对象被传递性地写入,以便可以通过ObjectInputStream重构对象的完整等价图。
--------------------------------------------------------------------------
16.有以下代码
class Address {
private String addressName;
private String zipCode;
// 构造方法
public Address(String addressName, String zipCode) {
this.addressName = addressName;
this.zipCode = zipCode;
}
// get/set方法
public String getAddressName() {
return addressName;
}
public void setAddressName(String addressName) {
this.addressName = addressName;
}
public String getZipCode() {
return zipCode;
}
public void setZipCode(String zipCode) {
this.zipCode = zipCode;
}
}
class Worker implements Serializable {
private String name;
private int age;
private Address address;
// 构造方法
public Worker(String name, int age, Address address) {
this.name = name;
this.age = age;
this.address = address;
}
// get/set方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
public class TestSerializable {
public static void main(String[] args) throws Exception {
Address addr = new Address("Beijing", "100000");
Worker w = new Worker("Tom", 18, addr);
OutputStream os = new FileOutputStream("fout.dat");
ObjectOutputStream oout = new ObjectOutputStream(os);
oout.writeObject(w);
oout.close();
}
}
运行结果:
编译正常,运行时异常
Exception in thread "main" java.io.NotSerializableException