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. [QNAP crontab 定時執行程式

    注意要自動執行的 sh 檔不要放在 /root 裡, 不然韌體更新後檔案會不見, 要放在個人帳號的資料夾,例如 /share/homes/帳號/ QNAP 的 crontab 放在 /etc/conf ...

  2. Python爬虫之模拟登录微信wechat

    不知何时,微信已经成为我们不可缺少的一部分了,我们的社交圈.关注的新闻或是公众号.还有个人信息或是隐私都被绑定在了一起.既然它这么重要,如果我们可以利用爬虫模拟登录,是不是就意味着我们可以获取这些信息 ...

  3. [BZOJ3110] [Zjoi2013] K大数查询 (树套树)

    Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c如果是2 a b c形式,表示询问从第a个位置到第b个位置 ...

  4. 小程序input输入框获取焦点时,文字会出现闪动

    最近在开发小程序时,发现一个有趣的现象.input里面设置了placeholder,随后当输入框获取焦点时,文字会出现一瞬间的抖动,随后正常. 猜想可能是设置的font-family不同引起的抖动,但 ...

  5. 大数据(2):基于sogou.500w.utf8数据hive的实践

    一.环境的搭建 1.安装配置mysql rpm –ivh MySQL-server-5.6.14.rpm rpm –ivh MySQL-client-5.6.14.rpm 启动mysql 创建hive ...

  6. python 检测nginx状态,若无法访问发邮件通知

    应用场景:用来检测网站可用性,访问失败,则发邮件通知 #!/usr/bin/env python import urllib2,time,smtplib,string,logging from con ...

  7. Jersey+mybatis实现web项目第一篇

    ---恢复内容开始--- Jesery第一篇:实现Jesery前后台页面交互,Form表单提交,后台控制页面跳转 该项目中有实现的功能: Mybatis实现后台数据持久化 Jersey页面数据提交 后 ...

  8. 使用text-overflow: ellipsis 处理文本溢的一个小问题

    今天在做一个自定义 select多选 搜索的时候,有这样子的一个需求: 1.点击自定义的一个 选项内容框,下拉可多选项 2.多选项不允许换行,且父溢出拆剪,(单行)溢出部分使用 "...&q ...

  9. linux下关闭网络命令

    CTRL+ALT+F1 进入命令行模式 CTRL+ALT+F7 退出命令行模式 sudo ifconfig ethX dwon 关闭网卡sudo /etc/init.d/networking stop ...

  10. sudo用法

    sudo的用法    xxx is not in the sudoers file.This incident will be reported.的解决方法   1.切换到root用户下,怎么切换就不 ...