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 ...
随机推荐
- Android Studio设置快捷键和背景
1.快捷键设置 复制代码并且向下移动 向下移动代码 代码提示 代码改错 更改文件名称 alt + shift + R 2.更改背景颜色-豆绿色 来自为知笔记(Wiz)
- 在实际项目中使用LiteDB NoSQL数据库
LiteDB 是一个 NoSQL 数据库,特点是 MongoDB like 和 0 配置.100% 原汁原味的 C# 开发, Release 只有一个 DLL,官方有一下适用场景:移动App,桌面小应 ...
- 【FlashPlayer】-Debug版本-开发人员推荐
Adobe的Flash-Player的版本分为“普通版本”和“Debug版本”,后者可以协助开发者测试和调试程序. 那么,先给出Debug版本的下载地址:http://www.adobe.com/su ...
- Heritrix工具实现网络爬虫
上次用的java相关知识实现了一个简单的网络爬虫,现在存在许多开源免费的爬虫工具,相对来说,可以很简单的获取网页数据,并写入到本地. 下面我就阐述一下我用Heritrix爬虫工具实现网页数据爬取. - ...
- 关于Java中Eclipse运行卡顿、未响应,Cpu100%的快速处理办法
1.与近几日我以及我的同事们遇到一件非常奇怪的问题,我们目前在实现一个小程序,但是不知为何,Eclipse突然变得很卡,以为是小问题最后闹到重启都没解决,于是 我开始查找造成这个现象的原因,发现这个程 ...
- kali linux 2.0下搭建DVWA渗透测试演练平台
DVWA (Dam Vulnerable Web Application)DVWA是用PHP+MySQL编写的一套用于常规WEB漏洞教学和检测的WEB脆弱性测试程序.包含了SQL注入.XSS.盲注等常 ...
- SpringMVC注解@RequestMapping之produces属性导致的406错误
废话不多说,各位,直接看图说话,敢吗?这个问题网上解决的办法写的狠是粗糙,甚至说这次我干掉它完全是靠巧合,但是也不否认网上针对406错误给出的解决方式,可能是多种情况下出现的406吧?我这次的流程就是 ...
- NSThread创建线程的三种方法
- (IBAction)NSThreadBtnClick:(id)sender { [self threadObjectMethod]; [self threadClassMethod]; [self ...
- php面试题汇总二(基础篇附答案)
介绍一些php常见面试题及答案,都是平时面试的时候经常会遇到的,小伙伴们仔细了解下吧.接着上一篇php面试题汇总一(基础篇附答案) 1.在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义 ...
- 我读<代码整洁之道>--读书笔记整理
第一章 整洁代码 "我可以列出我留意到的整洁代码的所有特点,但其中有一条是根本性的,整洁的代码总是看起来像是某位特别在意他的人写的.几乎没有改进的余地,代码作者设么都想到了,如果你企图改进它 ...