第12次作业

1. 本周学习总结

1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容。

2. 面向系统综合设计-图书馆管理系统或购物车

使用流与文件改造你的图书馆管理系统或购物车。

2.1 简述如何使用流与文件改造你的系统。文件中数据的格式如何?

答:
用流与文件改造系统的主要步骤

  • 静态初始化块初始图书馆内的图书的数据。
  • 将初始化后的数据使用对象流ObjectOutputStream写入文件Book.data进行保存(用户模块也用类似的方式进行操作)。
  • 在图书馆模块中写一个方法,用于保存修改后文件数据,操作过程中数据的修改都将能进行保存(用户模块也要写这个方法)。

文件中数据的格式:用对象流写入文件是以十六进制保存的。

2.2 简述系统中文件读写部分使用了流与文件相关的什么接口与类?为什么要用这些接口与类?

接口InputStreamOutputStreamSerializable
ObjectInputStreamObjectOutputStream、文件类File
原因:不使用字节字符流,而使用对象流,是为了可以将一整个对象的信息都存入文件。使用对象流写入或读取对象时,是需要对象序列化的,这时候就要用到Serializable接口。

2.3 截图读写文件相关代码。关键行需要加注释。

图书馆初始化


		books.put(new Book("红",100,"文学"), 33);
		books.put(new Book("橙",101,"艺术"), 44);
		books.put(new Book("黄",102,"经济"), 66);
		books.put(new Book("绿",103,"娱乐"), 11);
		books.put(new Book("青",130,"杂志"), 22);
		books.put(new Book("蓝",140,"报纸"), 55);
		books.put(new Book("紫",300,"哲学"), 44);
		//使用ObjectOutputStream类将这些图书信息写入文件且保存
		File file = new File("Books.data");
		if(!file.exists()){//文件不存在时,创建文件,并将图书信息写入文件
		ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
		Iterator<Map.Entry<Book, Integer>> m = books.entrySet().iterator();
		while(m.hasNext()){
			Map.Entry<Book, Integer> e = m.next();
				oos.writeObject(e.getKey());
				oos.writeObject(e.getValue());
		}
		oos.close();
		}
		else{//文件存在时,直接从文件中读取数据
			try{
				System.out.println("hhhhh");
			ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
			Book b = (Book)ois.readObject();
			while(b!=null){
				int num = (int)ois.readObject();
				books.put(b,num);
			
			}
			ois.close();
			}catch(Exception e){//使用对象流读取到文件尾的时候会提示EOFException异常,所以进行try/catch处理
			}
		}
	

用户初始化

	public static void initializeAdministrator( ) throws ClassNotFoundException, FileNotFoundException, IOException{
		userSet.add(new Administrator("管理员", 0, "0"));
		userSet.add(new Student("yellow", 00000, "huang"));
		userSet.add(new Student("red", 12345, "hong"));
		File file = new File("Users.data");
		if(!file.exists()){	//文件不存在时,将用户信息写入文件
		ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
		for(User u:userSet)
			oos.writeObject(u);
		oos.close();
		}
		else{//文件存在时,直接读取文件内信息
			ObjectInputStream ois;
			try {
				ois = new ObjectInputStream(new FileInputStream(file));
				User u=(User)ois.readObject();
				while(u!=null){
					if(u instanceof User)
					userSet.add(u);
					 u=(User)ois.readObject();
				}
				ois.close();
			}  catch (Exception e) {//使用对象流读取到文件尾的时候会提示EOFException异常,所以要进行try/catch处理
			}
		}
	}

修改后的图书信息的保存

	private static void saveBookData() throws IOException{//书籍信息改动之后进行的保存
		File file = new File("Books.data");
		ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
		Iterator<Map.Entry<Book, Integer>> m = books.entrySet().iterator();
		while(m.hasNext()){
			Map.Entry<Book, Integer> e = m.next();
				oos.writeObject(e.getKey());
				oos.writeObject(e.getValue());
		}
		oos.close();
	}

修改后的用户信息的保存

	public static void saveUser() throws IOException{//用户信息改动之后进行的保存
		File file = new File("Users.data");
		ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
		User u;
		for(User u1:userSet){
				oos.writeObject(u1);
		}
		oos.close();
	}

3. 代码量统计

3.1 统计本周完成的代码量

需要将每周的代码统计情况融合到一张表中。

周次 行数 新增行数 文件数 新增文件数
1 115 115 17 17
2 421 306 24 7
3 698 277 30 6
5 1085 387 38 8
6 1497 412 48 10
7 2033 536 57 9
8 2265 232 60 3
9 2728 522 65 5
10 3360 632 73 8
11 3958 598 83 10
12 4435 477 90 7
13 4802 367 96 6
posted @ 2017-12-09 17:29  学java真开心  阅读(184)  评论(0编辑  收藏  举报