Java第13周作业

1.本周学习总结

1.1以你喜欢的方式(思维导图或其他)归纳总结集合相关内容。

  • 思维导图
    1122718-20171209184826384-282321005.png

  • 要进行输入、输出操作的话一般流程(在这里以文件操作为例子)
    | - 通过File类定义一个要操作文件的路径(如果不是文件就没有这一步了
    | - 通过字节流或者字符流的子类对象为父类对象实例化
    | - 进行数据的读(输入),写(输出)操作
    | - 数据流属于资源操作,资源操作必须关闭
  • 对于java.io 包而言,定义了两类流:
    | - 字节流(JDK 1.0):InputStream、OutputStream
    | - 字符流(JDK 1.1):Reader、Writer
  • 字节流与字符流的区别
    | - 字节流与字符流最大的区别:字节流直接与终端文件进行数据交互,字符流需要将数据经过缓冲区处理才与终端文件数据交互。
    | - 在使用OutputStream输出数据时即使最后没有关闭输出流,内容也可以正常输出,但是如果在使用字符输出流Writer,在执行最后如果不关闭输出流,就表示在缓冲区中处理的内容不会被强制性清空,所以就不会输出数据。PS:可以用flush()方法强制清空缓冲区。
  • 关于字节流与字符流的小总结:
    | - 在开发中对于字节数据处理比较多,例如:图片、音乐、电影、文字。
    | - 要处理中文时,应该优先考虑字符流,如果没有中文问题,建议使用字节流

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

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

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

  • 使用Reader类子类BufferedReader来进行改造。

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

  • 使用的类:
    | - File
    |- FileReader
    | - BufferedReader
  • 使用BufferedReader进行读取操作的时候,内部使用了缓冲区,对于图书馆这种大文件类型的系统,有缓冲区才可以保证查询资料的速度。

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

    1122718-20171209182455261-1605864002.png

1122718-20171209185706290-543041413.png

选做: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的数据读出。(截图关键代码,出现学号)

1122718-20171209120727917-753447015.png

1122718-20171209121313152-273318585.png

1122718-20171209121345839-1305260309.png

1122718-20171209121404824-886570520.png

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

1122718-20171209121947058-166136442.png

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

  • 参考:本题具体要求见流与文件实验任务书-题目1-2.1
  • 参考代码:TextFileTest.java

1122718-20171209122102824-814772318.png

  • 因为PrintWriter内部使用了缓冲区,如果不通过close()或者flush()方法关闭或输出缓冲区中的内容的话,就默认为不输出内容了,所以如果不加close()文件大小为0字节。

    4.2. 缓冲流

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

  • 先创建一个一千万行内容的文件
    1122718-20171209130142589-1293276705.png

  • 使用Scanner从文件中读取数据
    1122718-20171209130311949-100696498.png

  • 使用BufferedReader从文件中读取数据
    1122718-20171209130559449-1859843173.png

  • 由上面的比较可以很明显的看出,使用BufferedReader从文件中读取的速度要更快,原因是因为BufferedReader内部使用到了缓冲区,先将数据存放到缓冲区中再对底层数据进行操作,这样可以减少对底层数据操作的次数,由此运行时间也就大大减少了。

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

  • 参考:本题具体要求见流与文件实验任务书-题目1-2.2到2.3
  • 参考代码:BufferedReaderTest.java

  • 使用PrintWriter的写入文件速度
    1122718-20171209131322120-918723512.png

  • 使用BufferedWriter的写入文件速度
    1122718-20171209131646714-962917749.png

  • 从上面两种子类写入文件的运行时间可以看出,使用BufferedWriter的写入文速度更快,因为BufferedWriter内部中也是试用了缓冲区,更BufferedReader相同,可以先将数据存放到缓冲区中,然后再一起对底层数据进行操作,相比PrintWriter省去了许多与底层数据操作的次数,因此运行时间也就减少了,运行速度更快了。

4.4. Scanner基本概念组装对象

编写public static List<Student> readStudents(String fileName)从fileName指定的文本文件中读取所有学生,并将其放入到一个List中。应该使用那些IO相关的类?说说你的选择理由。

  • 实验文件:Students.txt
  • 参考资料:TextFileTest目录下TextFileTest.java

  • 应当使用的IO相关类:ArrayList,ScannerFileReader
    | - ArrayList:为了通过ArrayList中提供的add()get(int)方法,来把读取的学生信息封装后,放入list中,以及之后的读取验证。
    | - Scanner:是为了通过Scanner的nextLine()方法读取出每个学生(每行一个学生)的信息,然后调用String类中的split方法提取出学生信息,然后再复原出学生全部信息,最后添加给list,以及通过Scanner提供的构造方法,结合传入的文件名fileName读取文件信息。
    | - FileReader:通过传入的文件名fileName新建出一个Reader子类,读取数据。

  • Student类中的readStudents(String fileName)throws FileNotFoundException方法
    1122718-20171209141635745-1621580577.png

  • main函数中调用readStudents(String fileName)throws FileNotFoundException方法,然后在输出list。
    1122718-20171209142023808-168763716.png

  • 运行结果:
    1122718-20171209142117339-2071256693.png

3.3 统计本周完成的代码量

需要将每周的代码统计情况融合到一张表中。
1122718-20171209183502540-240469840.png

周次总代码量新增代码量总文件数新增文件数
112012022
228016053
3590310105
4780190122
51290510175
61710420203
72513803244
825130240
93014501273
103441327303
114121680377
124667546425
135214547486

转载于:https://www.cnblogs.com/suwl/p/8012363.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值