千锋20200316

在千锋“逆战”学习第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
发布了40 篇原创文章 · 获赞 0 · 访问量 1137

猜你喜欢

转载自blog.csdn.net/qq_41841482/article/details/104907955