201521123091 《Java程序设计》第12周学习总结
Java 第十一周总结
第十一周的作业。
目录
1.本章学习总结
2.Java Q&A
3.码云上代码提交记录及PTA实验总结
4.课后阅读
1.本章学习总结
1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容。
- File既能代表一个特定文件的名称,又能代表一个目录下的一组文件的名称。如果它指的是一个文件集,我们就可以对此集合调用list()方法,这个方法会返回一个字符串数组。
- 通过继承,任何自InputStream或Reader派生而来的类都含有名为read()的基本方法,用于读取单个字节或者字节数组。同样任何自OutputStream或Writer派生而来的类都含有名为write()的基本方法,用于写单个字节或者字节数组。
- 与输入有关的所有类都应该从InputStream继承,而与输出有关的所有类都应该从OutputStream继承。
- 通过叠合多个对象来提供多种不同功能的组合,这就是装饰器的设计模式。
- 与InputStream和OutputStream面向字节IO不同的是,Reader和Writer是兼容Unicode与面向字符的IO。
- RandomAccessFile适用于由大小已知的记录组成的文件,所以我们可以使用seek()进行记录的读取或者修改。
- I/O流的典型使用方式:
- BufferedReader用于缓冲输入文件,通过减少实际对磁盘的读写来提高速度。
- 格式化的输入可以使用DataInputStream,available()方法可以查看还有多少可供存取的字符。虽然PrintWriter也可以对数据进行格式化,但是为了输出一个可供另一个流恢复的数据,用DataOutputStream写入数据,用DataInputStream恢复数据更好。
2.Java Q&A
将Student对象(属性:int id, String name,int age,double grade)写入文件student.data、从文件读出显示。
1. 字符流与文本文件:使用 PrintWriter(写),BufferedReader(读)
1.1 生成的三个学生对象,使用PrintWriter的println方法写入student.txt,每行一个学生,学生的每个属性之间用|作为分隔。使用Scanner或者BufferedReader将student.txt的数据读出。(截图关键代码,出现学号)


1.2 生成文件大小多少?分析该文件大小
生成文件大小:48字节

| 属性 | 字节数 |
|---|---|
| num | 1 |
| name | 4 |
| age | 2 |
| score | 4 |
| 分隔符(共三个) | 3 |
| 行末尾 | 2 |
| 一行 | 16 |
1.3 如果调用PrintWriter的println方法,但在后面不close。文件大小是多少?为什么?
0字节
因为数据写到缓冲区上,原来有close()方法自动调用flush()来刷新,但是现在没有close()了,所以数据在缓冲区上直接丢失了。
2.缓冲流
2.1 使用PrintWriter往文件里写入1千万行(随便什么内容都行),然后对比使用BufferedReader与使用Scanner从该文件中读取数据的速度(只读取,不输出),使用哪种方法快?请详细分析原因?提示:可以使用junit4对比运行时间

用BufferedReader更快,因为使用缓冲可以减少IO次数,可以防止每次读取时都得进行实际的读操作。其实Scanner也有缓冲区,但是相比于BufferedReader要小不少。
2.2 将PrintWriter换成BufferedWriter,观察写入文件的速度是否有提升。记录两者的运行时间。试分析原因

有提升,同样是因为BufferedWriter使用了缓冲技术
3. 字符编码
3.1 现有EncodeTest.txt 文件,该文件使用UTF-8编码。使用FileReader与BufferedReader将EncodeTest.txt的文本读入并输出。是否有乱码?为什么会有乱码?如何解决?(截图关键代码,出现学号)

有乱码,因为FileReader并没有实现父类中带字符集参数的构造函数,只能按系统默认的字符集来解码。
这样解决:

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

4. 字节流与二进制文件:DataInputStream、 DataOutputStream、ObjectInputStream
4.1 参考DataStream目录,尝试将三个学生对象的数据写入文件,然后从文件读出并显示。(截图关键代码,出现学号)




4.2 生成的文件有多大?分析该文件大小。将该文件大小和题目1生成的文件对比是大了还是小了,为什么?
51字节:一个int4字节,一个double8字节,名字都只有3个字符,再加上正文结束标识符(两个字符),每个名字有5个字符,一个字符一字节,每个名字5个字节。一个学生17个字节,一共三名学生,51字节。
4.3 使用wxMEdit的16进制模式(或者其他文本编辑器的16进制模式)打开student.data,分析数据在文件中是如何存储的。

分析数据是这样存储的:
0000 000c -> 12
4055 c000 0000 0000 -> 87.50
0003 7177 65 -> qwe
00 0000 0a -> 10
40 52e0 0000 0000 00 -> 75.5
00 0366 6666 -> fff
0000 0008 -> 8
404f 0000 0000 0000 -> 62.0
0003 6376 62 -> cvb
4.4 使用ObjectInputStream(读), ObjectOutputStream(写)读写学生。(截图关键代码,出现学号) //参考ObjectStreamTest目录

5. Scanner基本概念组装对象
编写public static List readStudents(String fileName);从fileName指定的文本文件中读取所有学生,并将其放入到一个List中。应该使用那些IO相关的类?说说你的选择理由。

首先使用BufferedReader,使用缓冲技术,让读写更高效!
然后因为要读UTF-8格式的文件,所以需要用到InputStreamReader,然后输入流由FileInputStream提供支持。
当然使用Scanner也不错的。
6.RandomAccessFile
6.1 使用RandomAccessFile实现题目1.1。(截图关键代码,出现学号)



6.2 分析文件大小
72字节
| 属性 | 字节数 |
|---|---|
| num | 4 |
| name(两个中文字符) | 6 |
| 字符串结尾 | 2 |
| age | 4 |
| score | 8 |
| 一行 | 24 |
7.文件操作
编写一个程序,可以根据指定目录和文件名,搜索该目录及子目录下的所有文件,如果没有找到指定文件名,则显示无匹配,否则将所有找到的文件名与文件夹名显示出来
7.1 编写public static void findFile(String path,String filename)函数,以path指定的路径为根目录,在其目录与子目录下查找所有和filename相同的文件名,一旦找到就马上输出到控制台。(截图关键代码,出现学号)


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

DFS改成BFS,EZ:

7.3 选做:实现删掉指定目录及其子目录下的所有空文件夹
(见题4.3)
稍作改动就可以删了

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



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

题目是这个意思吗= =,但是应该用个比较厉害的,比如


8.2 选做:修改HrefMatch.java,尝试匹配网页中的数字字符串、匹配网页中的图片字符串。
String patternDigitString = "[+-]?[0-9]+";



倒数第二张图:

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


3.码云上代码提交记录
题目集:多线程(4-4到4-10)
3.1 码云代码提交记录
在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

4. 课外阅读
4.1 尝试翻译Lesson: Basic I/O中的Summary
概要
该java.io包中包含很多类可以使你的程序用来读取和写入数据。大多数类实现顺序访问流。顺序访问流可以分为两类:读写字节和读写Unicode字符。每个顺序访问流都具有各自的特性,例如读取或写入一个文件,当 读写的时候筛选数据,或序列化一个对象。
java.nio.file包为文件和文件系统I/O提供广泛支持。这是一个非常全面的API,但关键切入点如下:
- Path类有几个操作路径的方法。
- Files类有文件操作方法,如移动,复制,删除,也有用于检索和设置文件属性的方法。
- FileSystem类有各种用于获取有关文件系统的信息的方法。
关于NIO.2的更多信息可以在java.net的OpenJDK:NIO项目网页中被找到。该网站包括很多NIO.2的本教程没有提及的功能,如多播,异步I/O,并创建自己的文件系统。
4.2 尝试完成Questions and Exercise
Questions
What class and method would you use to read a few pieces of data that are at known positions near the end of a large file?
想用RandomAccessFile来实现,但是标答说newByteChannel会更好,还没研究过,有时间看看,这都是nio的东西。When invoking format, what is the best way to indicate a new line?
%n是相对于\n更好的选择,因为后者不具有平台独立性。
下面关于NIO的我都是先搬过来,后面再深入了解。
How would you determine the MIME type of a file?
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。MIME_百度百科
Files中的probeContentType()方法用来判断。What method(s) would you use to determine whether a file is a symbolic link?
symbolic link符号链接,又称为软链接,是作为另一个文件的引用。软链接对于应用来说是透明的,对于软链接的操作都会被重新定向到链接的目标文件中去。软连接的删除对于指向的文件没有任何影响,但是如果指向的文件被删除之后,软链接便会失效。Files类重有isSymbolicLink()来判断一个文件是否是一个符号链接。
Exercises
Exercise 1. Write an example that counts the number of times a particular character, such as e, appears in a file. The character can be specified at the command line. You can use xanadu.txt as the input file.
String line = null;
while ((line = bufferedReader.readLine()) != null) {
for (int i = 0; i < line.length(); i++) {
if (line.charAt(i) == lookFor) {
cnt++;
}
}
}
System.out.println(cnt);
bufferedReader.close();
Exercise 2. The file datafile begins with a single long that tells you the offset of a single int piece of data within the same file. Write a program that gets the int piece of data. What is the int data?
文件损坏了……
4.3 字符集与编码
4.4 Java正则表达式的语法与示例
匹配验证:
//编译正则表达式
Pattern pattern = Pattern.compile(regex)
//CASE_INSENSITIVE表示对大小写不敏感
Matcher matcher = pattern.matcher(str);
// 字符串是否与正则表达式相匹配
return matcher.matches;
//()返回一个boolean值,表示是否匹配
字符串中查询字符或者字符串:
matcher.find()用来查找主串当中是否有包含我们需要的字符串,如果有包含,我们就可以调用matcher.start()和matcher.end()来获取该匹配字符串的开始和结尾。
看的不过瘾的请点下面
回到顶部
又是做的很糙的一次,笑容尬住
201521123091 《Java程序设计》第12周学习总结的更多相关文章
- 2018面向对象程序设计(Java)第12周学习指导及要求
2018面向对象程序设计(Java)第12周学习指导及要求 (2018.11.15-2018.11.18) 学习目标 (1) 掌握Java GUI中框架创建及属性设置中常用类的API: (2) 掌 ...
- 面向对象程序设计(JAVA) 第12周学习指导及要求
2019面向对象程序设计(Java)第12周学习指导及要求 (2019.11.15-2019.11.18) 学习目标 (1) 掌握Vetor.Stack.Hashtable三个类的用途及常用API ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20175209 《Java程序设计》第九周学习总结
20175209 <Java程序设计>第九周学习总结 一.教材知识点总结 有关数据库下载中存在可能出现的问题已经在博客<数据库安装和使用过程中出现的一些问题>给出了相应的解决办 ...
- 20175221 2018-2019-2 《Java程序设计》第一周学习总结
20175221 2018-2019-2 <Java程序设计>第一周学习总结 教材学习内容总结 本周通过观看书本配套视频,学到了如解释器,编译器等一些简单概念. 还懂得了java的一些简单 ...
- 20175204 张湲祯 2018-2019-2《Java程序设计》 第一周学习总结
20175204 张湲祯 2018-2019-2<Java程序设计>第一周学习总结 教材学习内容总结 -第一章Java入门要点: -Java的地位:具有面向对象,与平台无关,安全稳定和多线 ...
- 20175227张雪莹 2018-2019-2 《Java程序设计》第九周学习总结
20175227张雪莹 2018-2019-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十一章 JDBC数据库操作 MySQL数据库管理系统 下载安装MySQL 若下载的是 ...
- 20175314 《Java程序设计》第九周学习总结
20175314 <Java程序设计>第九周学习总结 教材学习内容总结 根据课本的介绍下载了MySQL和Navicat for MySQL并成功对后者进行破解 MySQL客户端管理工具(如 ...
- 20175234 2018-2019-2 《Java程序设计》第九周学习总结
目录 20175234 2018-2019-2 <Java程序设计>第九周学习总结 教材学习内容总结 教材学习中的问题和解决过程 代码托管 感想 学习进度条 参考资料 20175234 2 ...
随机推荐
- Linux Command Line(II): Intermediate
Prerequisite: Linux Command Line(I): Beginner ================================ File I/O $ cat > a ...
- Apache Kafka系列(一)
摘要: 1.Apache Kafka基本概念 2.Kafka的安装 3.基本工具创建Topic 本文基于centos7, Apache Kafka 0.11.0 一.基本概念 Apache Kafka ...
- RobotFramework自动化测试框架-移动手机自动化测试AppiumLibrary介绍
在使用AppiumLibrary库时,需要预先安装好Appium自动化工具,Appium官网地址为:http://appium.io/ Appium的GitHub地址为:https://github. ...
- cornerstone 使用报错 working copy ... is too old(format 10 created by subversion 1.6)
1.....本来正常使用的cornerstone 突然出现这个问题 图片如下 2....解决方案,,,,也搜集了方法,,但是最后竟然就这样解决了,,完全搞不懂的解决方案啊 如图 3......如有错误 ...
- 小米wifi
场景:把小米wifi插主机上,作为热点发射器:然后使用手机搜索到这个热点,建立wifi连接 驱动:当"把小米wifi插主机上"的时候,主机可能无法识别这个设备,所以需要前往官网下载驱动 下载地址:ht ...
- CSS3基础(3)——CSS3 布局属性全接触
一. 弹性盒模型 1.弹性盒子模型介绍 弹性盒模型(Flexible Box或Flexbox)是一个CSS3新增布局模块,官方称为CSS Flexible Box Layout Module,用于实现 ...
- 在Eclipse中关联Android API源码
在Eclipse中快速关联API源码,便于查看类以及方法.方法如下: 1. 在对应的项目文件右键——>properties——>java build path——>libraries ...
- 安装配置 flannel - 每天5分钟玩转 Docker 容器技术(59)
上一节我们部署了 etcd,本节安装和配置 flannel. build flannel flannel 没有现成的执行文件可用,必须自己 build,最可靠的方法是在 Docker 容器中 buil ...
- 图片浏览 h5
@{ Layout = null; } <html> <head> <script type="text/javascript" src=" ...
- MySQL (九)
1 代码执行结构 代码执行结构有三种:顺序结构.分支结构和循环结构. 1.1 分支结构 分支结构:实现准备多个代码块,按照条件选择性执行某段代码. 在MySQL中只有if分支. 基本语法 if 条件判 ...