本周学习总结

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


书面作业

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

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

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

1.2 生成文件大小多少?分析该文件大小

answer:文件有1KB含52个字节,里面包含了学生数和3条学生信息。

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

answer:文件大小是0KB,因为PrintWriter的println方法没有关闭,一些数据还在缓存中,没有执行close方法中的flush,数据就丢失了。
  • 参考:本题具体要求见流与文件实验任务书-题目1-2.1

  • 参考代码:TextFileTest.java

缓冲流

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

answer:使用BufferedReader比较快,因为它设置了缓冲区,读写时先访问缓冲区,必要的时候才进行真正的底层 I/O操作,提升了读写效率。

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

answer:使用BufferedWriter后写入文件的速度有提升。PrintWriter虽然有自动换行且有缓冲区,但BufferedWriter的缓冲区大,写入大量数据时减少了写入次数。

字符编码

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

answer:有乱码,FileReader只能按系统默认的字符集来解码 ,但是EncodeTest.txt是按照`UTF-8`进行编码,所以会输出乱码。可以使用InputStreamReader按照指定编码`UTF-8`在字节流与字符流间转换,解析文件。

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

  • 参考:InputStreamReaderTest.java与教学PPT

字节流、二进制文件:DataInputStream, DataOutputStreamObjectInputStream

4.1 参考DataStream目录相关代码,尝试将三个学生对象的数据写入文件,然后从文件读出并显示。(截图关键代码,出现学号)

4.2 生成的文件有多大?分析该文件大小?将该文件大小和题目1生成的文件对比是大了还是小了,为什么?

answer:生成的文件有67个字节,该文件含三个学生信息,id,age共八个字节,grade 也八个字节,还有name4-5个字节。与题目1对比大了。使用UTF编码。

4.3 使用wxMEdit的16进制模式(或者其他文本编辑器的16进制模式)打开student.data,分析数据在文件中是如何存储的。

answer:文件有46个字节,16进制中两位表示一个字节,空格是20,数字0是30,后面递增。

4.4 使用ObjectInputStream(读), ObjectOutputStream(写)读写学生。(截图关键代码,出现学号) //参考ObjectStreamTest目录

  • 参考:本题具体要求见流与文件实验任务书-题目1-1

Scanner基本概念组装对象

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

answer:使用了Scanner,FileReader类。因为Scanner可以遍历所有行,以指定分隔符提取学生信息,并存入List中。FileReader可以以字符流的形式读取文本。
  • 实验文件:Students.txt
  • 参考:TextFileTest目录下TextFileTest.java

选做:RandomAccessFile

使用RandomAccessFile实现题目1.1。(截图关键代码,出现学号)

分析文件大小

文件操作

编写一个程序,可以根据指定目录和文件名,搜索该目录及子目录下的所有文件,如果没有找到指定文件名,则显示无匹配,否则将所有找到的文件名与文件夹名显示出来。

7.1 编写public static void findFile(String path,String filename)函数,以path指定的路径为根目录,在其目录与子目录下查找所有和filename相同的文件名,一旦找到就马上输出到控制台。(截图关键代码,出现学号)

7.2 加分点:使用队列、使用图形界面、使用Java NIO.2完成(任选1)

使用Java NIO.2

7.3 选做:实现删掉指定目录及其子目录下的所有空文件夹。

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

7.4 选做:将指定目录及子目录下的所有.java文件,转化成UTF-8编码格式,并测试。

正则表达式

8.1 如何判断一个给定的字符串是否是10进制数字格式?尝试编程进行验证。(截图关键代码,出现学号)

8.2 选做:修改HrefMatch.java,尝试匹配网页中的数字字符串、匹配网页中的图片字符串。

answer:
  • 参考:本题具体要求见流与文件实验任务书-题目3

8.3 选做(较难):进一步改造上面的程序,获得图片的链接,如IMG src="images/mail1.gif",然后经过处理,生成该图片的实际链接地址http://cec.jmu.edu.com/images/mail1.gif。最后将生成的若干地址,放入一个队列。编写方法,可以依照该队列的所有图片地址,一次将图片下载下来。

正则表达式参考文章


码云代码提交记录

3.1 在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

3.2 PTA以前未完成的题目


选做:课外阅读

4.1 尝试翻译Lesson: Basic I/O中的Summary

4.2 尝试完成Questions and Exercise

4.3 字符集与编码

4.4 Java正则表达式的语法与示例

最新文章

  1. kali 下文件操作
  2. JavaScript 运动框架
  3. 【Android】Volley做网络请求的几种用法
  4. 微信公众平台开发(三) 订阅事件(subscribe)处理
  5. 第九课,T语言数组的定义与访问(版本5.0)
  6. 使用MegaCli和Smartctl获取普通磁盘
  7. JS获取网页属性包括宽、高等
  8. java转义xml中的多余尖括号
  9. 《python源代码剖析》笔记 python虚拟机中的函数机制
  10. Ubuntu登陆密码忘记
  11. Redis+Django(Session,Cookie、Cache)的用户系统
  12. beoplay(BO)耳机拒绝配对的解决方法
  13. EL表达式与标签的使用
  14. git中加入中文时,乱码
  15. JS实现图片放大查看
  16. 提交操作自动遮蔽实现之ajax
  17. 2018.10.2浪在ACM 集训队第二次测试赛
  18. [转载]金融行业 DevOps 解决方案概述
  19. Oracle根据表的大小排序SQL语句
  20. PROFIBUS-DP

热门文章

  1. 【leetcode】148. Sort List
  2. leetcode Binary Tree Right Side
  3. python 第六天
  4. Linux学习(1)-常用快捷键、文件管理和查询
  5. jsp中一些重要的问题
  6. 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:(一)概览
  7. HTML基础进阶
  8. “最美天气”Python抓取天气
  9. Socket套接字
  10. python专题-Mysql数据库(python2._+ Mysqldb)