1. 本周学习总结

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

思维导图:

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

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

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

简述:

购物车:在控制台商城里的物品写入文件然后在增删物品的时候也要对文件进行修改

数据格式:十六进制

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

接口:Serializable接口

类: ObjectOutputStream

原因:使用对象流是因为发现要写入的应该是物品,这是一个对象,所以用对象流。

使用Serializable接口是因为我想把商品类的物品写进文件用于存储数据,一开始直接使用了ObjectOutputStream ,但是在运行的时候系统报错了



后来问了一下大佬,说是需要Serializable接口,并且应该是存的类(即商品类)实现这个接口,然后程序就不会报错了



查找了一下这个接口的资料:

1.所谓的Serializable,就是java提供的通用数据保存和读取的接口。至于从什么地方读出来和保存到哪里去都被隐藏在函数参数的背后了。这样子,任何类型只要实现了Serializable接,就可以被保存到文件中,或者作为数据流通过网络发送到别的地方。也可以用管道来传输到系统的其他程序中。

2.实现java.io.Serializable 接口的类是可序列化的

个人理解:可序列化的类实现了Serializable接口就可以保存到文件中

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

(因为一开始没想好实现的类,先用了数据流,发现只能写入基本数据类型,后面改用对象流,写了一部分写入文件的代码)

相关代码:



运行结果:(这是个乱码,大佬说是因为存入文件的是一个对象- - 其实我不太清楚这个)

3. 代码量统计

3.1 统计本周完成的代码量

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

周数 行数 新增行数 文件数 新增文件数
1 57 57 5027 5027
2 400 400 10 10
3 508 508 23 13
5 609 609 31 8
6 612 612 40 9
7 584 584 46 6
8 432 432 50 4
9 620 620 56 6
10 468 468 60 4
11 476 476 67 7
12 593 593 74 7
13 646 646 82 8

4.选做:流与文件学习指导(底下的作业内容全部都是选做)

4.1. 字符流与文本文件:使用 PrintWriter(写),BufferedReader(读)

将Student对象(属性:int id, String name,int age,double grade)写入文件student.data、从文件读出显示。

4.1.1 生成的三个学生对象,使用PrintWriter的println方法写入student.txt,每行一个学生,学生的每个属性之间用|作为分隔。使用Scanner或者BufferedReader将student.txt的数据读出。(截图关键代码,出现学号)

关键代码:





运行截图:



4.1.2 生成文件大小多少(使用右键文件属性查看)?分析该文件大小。

文件大小:



分析:

按照 每个中文字符两个字节,每个英文字符以及”|”一个字节,换行符两个字节 计算:

第一、二、三行:16*3=48字节

第四行:16+2-1=17字节(多了一个中文2字节,最后一个数据少了一个数字1字节)

计算文件大小:48+17=65字节

4.1.3 如果调用PrintWriter的println方法,但在后面不close。文件大小是多少?为什么?

文件大小:



原因:由于PrintWriter内部使用了缓冲区,则根据缓冲区原理,当缓冲区满时才真正进行底层操作。如果调用PrintWriter的println方法,但在后面不close,则最后的字节可能并不会被传送出去,可能会造成数据的丢失。

4.2. 缓冲流

4.2.1 使用PrintWriter往文件里写入1千万行(随便什么内容都行),然后对比使用BufferedReader与使用Scanner从该文件中读取数据的速度(只读取,不输出),使用哪种方法快?截取测试源代码,出现学号。请详细分析原因?提示:可以使用junit4对比运行时间

测试代码:





运行结果:

使用BufferedReader方法快

原因:BufferedReader是字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取,而且也可以设置缓冲区的大小,由于BufferedReader的缓冲区比Scanner的更大,在使用时减少读取文本的操作次数,所以速度更快。

4.2.2 将PrintWriter换成BufferedWriter,观察写入文件的速度是否有提升。记录两者的运行时间。试分析原因。

关键代码:



运行截图:



原因分析:BufferedWriter比PrintWriter快。

PrintWriter和BufferedWriter都是继承java.io.Writer,所以很多功能都一样。虽然PrintWriter内部也使用缓冲区,但是BufferedWriter可以任意设定缓冲区大小,写入文件的速度更快。

4.3. 字符编码

4.3.1 现有EncodeTest.txt 文件,包含一些中文,该文件使用UTF-8编码。使用FileReader与BufferedReader将EncodeTest.txt的文本读入并输出。是否有乱码?为什么会有乱码?如何解决?(截图关键代码,出现学号)

其实一开始我的并没有乱码- - 百度说是window默认下是用GBK编码的,所以我先给它调成了UTF8编码。。

运行结果:



原因:有乱码是因为FileReader只能按系统默认的字符集(如GBK)来解码,但是自己新建的文件是按照UTF-8进行编码,因此将UTF-8编码的字符使用GBK编码来解析,就会出现乱码。

解决:手动设置了一下eclipse上的编码方式。。。。具体代码方法见下图:

4.3.2 编写方法convertGBK2UTF8(String src, String dst),可以将以GBK编码的源文件src转换成以UTF8编码的目的文件dst。

编写方法:



运行结果:

201621123062《java程序设计》第12周作业总结的更多相关文章

  1. 201621123062《java程序设计》第九周作业总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 思维导图1:(对集合部分做了一些改动和细化) 思维导图2:(泛型) 1.2 选做:收集你认为有用的代码片段 代 ...

  2. 201771010141 周强 面向对象程序设计(Java)第12周作业

    实验十二  图形程序设计 实验时间 2018-11-14 1.实验目的与要求 (1) 掌握Java GUI中框架创建及属性设置中常用类的API: (2) 掌握Java GUI中2D图形绘制常用类的AP ...

  3. 201521123027<java程序设计>第14周作业总结

    1.本周作业总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2.书面作业 Q1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自己 ...

  4. 2018面向对象程序设计(Java)第12周学习指导及要求

    2018面向对象程序设计(Java)第12周学习指导及要求 (2018.11.15-2018.11.18)   学习目标 (1) 掌握Java GUI中框架创建及属性设置中常用类的API: (2) 掌 ...

  5. 面向对象程序设计(JAVA) 第12周学习指导及要求

    2019面向对象程序设计(Java)第12周学习指导及要求 (2019.11.15-2019.11.18)   学习目标 (1) 掌握Vetor.Stack.Hashtable三个类的用途及常用API ...

  6. 20175204 张湲祯 2018-2019-2《Java程序设计》 第一周学习总结

    20175204 张湲祯 2018-2019-2<Java程序设计>第一周学习总结 教材学习内容总结 -第一章Java入门要点: -Java的地位:具有面向对象,与平台无关,安全稳定和多线 ...

  7. 20175314 《Java程序设计》第一周学习总结

    20175314 <Java程序设计>第一周学习总结   教材学习内容总结       除了学院统一购买的<Java 2 实用教程(第5版)>我还在网上买了一本<Head ...

  8. 20165225 《Java程序设计》第二周学习总结

    20165225<Java程序设计>第二周学习总结 1.视频与课本中的学习: ##### 1.标识符: 字母.下划线.美元符号.数字(不能是true,false,null还有关键字). # ...

  9. 20172306 《Java程序设计》第二周学习总结

    20172306<Java程序设计>第二周学习总结 教材学习内容总结 这一周的学习,我觉得我比上一周认真多了,而且我突然发现慢慢学习的过程中,以前有一些多余自己打出来的东西,有了更清晰的认 ...

  10. 20155312 2016-2017-2 《Java程序设计》第九周学习总结

    20155312 2016-2017-2 <Java程序设计>第九周学习总结 课堂内容总结 两个类有公用的东西放在父类里. 面向对象的三要素 封装 继承 多态:用父类声明引用,子类生成对象 ...

随机推荐

  1. html中的div span和frameset框架标签

    Div和span 1.      div独占一层,由div九不允许有别的. 2.      span标签不是独自占用一行,span一般用来设置字体. 框架标签: 什么是框架标签,就是把一个页面分成很多 ...

  2. JS显示动态的系统时间--JavaScript基础

    1.网页中实时显示当前时间 <!DOCTYPE html><html lang="en"><head> <meta charset=&qu ...

  3. 【BZOJ1585】【Luogu2944】地震损失2(网络流)

    [BZOJ1585][Luogu2944]地震损失2(网络流) 题面 题目描述 Wisconsin has had an earthquake that has struck Farmer John' ...

  4. [BZOJ1507] [NOI2003] Editor (splay)

    Description Input 输入文件editor.in的第一行是指令条数t,以下是需要执行的t个操作.其中: 为了使输入文件便于阅读,Insert操作的字符串中可能会插入一些回车符,请忽略掉它 ...

  5. 配置linux软件下载跟新地址

    /etc/yum.repos.d/CentOS-Base.repo 直接到mirrors.aliyum.com下载 diff:比较

  6. 记一次结合PHP多进程和socket.io解决问题的经历

    公司是做棋牌游戏的.前段时间接到一个后台人工鉴定并处理通牌作弊玩家的需求,其中需要根据几个玩家的游戏ID查询并计算他们在某段时间内彼此之间玩牌输赢次数和输赢总额. 牌局数据是存储在日志中心的,他们把牌 ...

  7. 命令行更新node和npm

    Windows系统下: 查看版本的命令和Ubuntu下一样. 不同的是Windows下不能使用"n"包管理器来对NodeJS进行管理,在这里我们使用一种叫"gnvm&qu ...

  8. js改变盒子大小(上下左右)分析

    js改变盒子大小 知识点 三个mouse事件:mousedown mousemove mouseup css的定位和cursor 思路 先解决单边问题识别范围,得到所选区域 event. 根据距离,判 ...

  9. HashMap中的resize以及死链的情况

    之前我已经写过关于HashMap的内容了:http://www.cnblogs.com/wang-meng/p/7545725.html 我们都知道HashMap是线程不安全的, 如果多线程来访问会有 ...

  10. systemd的作用

    早上群上讨论了一下systemd的作用,还导致了一个人的直接退群,出于求知心理,搜索了一些systemd,对此也作出了一些相应的整理: 一.systemd的诞生: 学习嵌入式bootloader与ke ...