1. 本周学习总结
1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容。
2. 面向系统综合设计-图书馆管理系统或购物车
使用流与文件改造你的图书馆管理系统或购物车。
2.1 简述如何使用流与文件改造你的系统。文件中数据的格式如何?
答:
用流与文件改造系统的主要步骤:
- 静态初始化块初始图书馆内的图书的数据。
- 将初始化后的数据使用对象流
ObjectOutputStream
写入文件Book.data
进行保存(用户模块也用类似的方式进行操作)。 - 在图书馆模块中写一个方法,用于保存修改后文件数据,操作过程中数据的修改都将能进行保存(用户模块也要写这个方法)。
文件中数据的格式:用对象流写入文件是以十六进制保存的。
2.2 简述系统中文件读写部分使用了流与文件相关的什么接口与类?为什么要用这些接口与类?
接口:InputStream
、OutputStream
、Serializable
类:ObjectInputStream
和ObjectOutputStream
、文件类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 |
来源:http://www.cnblogs.com/yellower/p/8012089.html