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. iOS - XMPP Openfire 服务器的搭建

    前言 提前下载好相关软件,且安装目录最好安装在全英文路径下.如果路径有中文名,那么可能会出现一些莫名其妙的问题. 提前准备好的软件: jdk-8u91-macosx-x64.dmg mysql-5.7 ...

  2. CentOS7.2编译安装PHP7.2.3之史上最详细步骤。

    首先,我们的CentOS版本信息如下: 开始我们的编译. 第一步: 将php安装包安装到/usr/src目录下. cd /usr/src && wget http://cn2.php. ...

  3. JavaScript设计模式(9)-享元模式

    享元模式 1. 介绍 一种优化模式 适合解决因创建大量类似对象而累积性能问题 javaScript 代码可能很快就用光浏览器的内容,通过把大量独立对象转化为少量共享对象,可以降低运行 Web 应用所需 ...

  4. java中获取项目在tomcat目录下的路径方法

    HttpServletRequest request //获取的是ROOT项目在tomcat下的路径 方法1: String path = request.getSession().getServle ...

  5. Ambari大数据的管理利器

    概述 一个完全开源的管理平台,用于供应,管理,监控和保护Apache Hadoop集群.Apache Ambari客户管理和操作Hadoop集群 Apache Ambari作为Hortonworks数 ...

  6. centos6.5下 hdp-2.4.2安装

    (1)准备工作 /usr/sbin/sestatus -v getenforce1./usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态SE ...

  7. java基本语法特殊点

    一.关系运算符 instanceof(类型比较运算符) example:a instanceof hello // hello是一个class ==与!=可以用于引用相等运算符( 二.数组 (数组是对 ...

  8. 12.C++-构造函数与析构函数调用顺序,const成员函数,const对象

    单个对象创建时,构造函数的调用顺序 1.首先判断该对象的类是否拥有父类,若有则先调用父类的构造函数 2.判断该对象的成员是否是其它类的成员,若是则调用成员变量的构造函数(调用顺序和声明顺序相同) 3. ...

  9. Openflow简介和安装

    搞网络研究的,跟踪斯坦福stanford大学的研究就很重要. 因为思科CISCO与斯坦福的渊源太深了.被誉神雕侠侣的思科创始人Sandy Lerner夫妇,一个在计算机学院,一个在商学院. 最近去看了 ...

  10. js实现二叉树

    //binary tree//add order remove findfunction tree() { var node = function(key) {  this.left = null;  ...