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. Learning part-based templates from large collections of 3D shapse CorrsTmplt Kim 代码调试

    平台: VMware上装的Ubuntu-15.10 环境准备工作:装Fortran, lapack, blas, cblas (理论上装好lapack后面两个应该是自动的),其他的有需要的随时安装就可 ...

  2. card card card HDU - 6205

    As a fan of Doudizhu, WYJ likes collecting playing cards very much. One day, MJF takes a stack of ca ...

  3. C#图解教程 第七章 类和继承

    类和继承 类继承访问继承的成员所有类都派生自object类屏蔽基类的成员基类访问使用基类的引用 虚方法和覆写方法覆写标记为override的方法覆盖其他成员类型 构造函数的执行 构造函数初始化语句类访 ...

  4. Aspose实现Office转PDF (ASP.NET)

    0.添加Aspose的DLL 1.可以直接去官网下载,不过默认是带水印的,如需去除水印可以购买 2.当然也可以在国内的一些下载站下载 3.将Aspose.Cells.dll.Aspose.Words. ...

  5. 用css以写代码形式画一个皮卡丘

    我的个人网站是通过写代码的形式来形成一个网站的,前一阵子在某个大神的github上看到他用写代码的形式来完成一个皮卡丘,于是心血来潮花了半个小时,也完成了一个作品. 这其中涉及到的知识点也不是很复杂, ...

  6. CenoOS 7环境下编译OpenJDK8

    一.准备工作 1.与编译jdk7的不同(如未编译过Jdk7可以不看) 1.1.不再使用"$make sanity"来检查编译环境,而是改用"$./configure&qu ...

  7. 【BZOJ4736】温暖会指引我们前行(Link-Cut Tree)

    [BZOJ4736]温暖会指引我们前行(Link-Cut Tree) ##题面 神TM题面是UOJ的 题解 LCT傻逼维护最大生成树 不会的可以去做一做魔法森林 #include<iostrea ...

  8. Bzoj5093: 图的价值

    题面 Bzoj Sol 一张无向无重边自环的图的边数最多为\(\frac{n(n-1)}{2}\) 考虑每个点的贡献 \[n*2^{\frac{n(n-1)}{2} - (n-1)}\sum_{i=0 ...

  9. ubuntu中eclipse 不支持gbk编码问题解决办法

    今天在ubuntu 下, 把Windows下工程导入Linux下Eclipse中,由于工程代码,是GBK编码,而Ubuntu默认不支持GBK编码,所以,要让Ubuntu支持GBK. 方法如下: 1.修 ...

  10. repo 和git的用法

    1. 服务器版本下载: repo init -u git@192.168.1.11:i700t_60501010/platform/manifest.git-b froyo_almond -m M76 ...