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 ...
随机推荐
- Jenkins小菜初次使用小记
title: Jenkins自动集成小记 Jenkins是用来自动构建任务的,也许你还不知道什么叫自动构建任务,它的意思是可以针对某个任务进行自动化,比如你开发的某个软件,每次写完代码提交到githu ...
- [SDOI2011]染色 线段树+树链剖分
考试一共四个半小时,光这道题就打了三个小时..然后又改了俩小时才过.我太蒟蒻了. 其实数据结构这种题就看第一遍打没打顺,顺了就A了,要是再找错再改就慢了,而且样例过了不能说明任何问题(虽然考试的时候我 ...
- python进阶(5):组合,继承
前两天我们认识了面向对象也对面向对象有了初步的认识今天我们先会说一点组合的进阶,今天重点是继承. 一.组合 组合只有一个例子因为组合只作为上一章的补充内容 #老师 课程 生日 class Course ...
- Python 装饰器总结
装饰器总结 前提 使用装饰器的前提在于Python提供的特性: 函数即对象,可以进行传递: 函数可以被定义在另外一个函数中: 可以通过一个例子来了解: def get_animal(name='dog ...
- WPF中实现多选ComboBox控件
在WPF中实现带CheckBox的ComboBox控件,让ComboBox控件可以支持多选. 将ComboBox的ItemsSource属性Binding到一个Book的集合, public clas ...
- QTextEdit控件使用
QTextEdit控件使用 QTextEdit *mpContentTextEdit = new QTextEdit(this); //设置占位符文本 mpContentTextEdit->se ...
- RQNOJ 201 奥运大包围:LIS + 拼链成环
题目链接:https://www.rqnoj.cn/problem/201 题意: 开始时n(n<=1000)个人手拉手围成一个圈. 后来这些人中的一些按顺序向里面出圈形成一个新圈.从而使原圈形 ...
- Servlet3.1上传图片示例
一.前端JSP页面 <%@page pageEncoding="UTF-8"%><!DOCTYPE html><html><head> ...
- golang的Channel
golang的Channel Channel 是 golang 一个非常重要的概念,如果你是刚开始使用 golang 的开发者,你可能还没有真正接触这一概念,本篇我们将分析 golang 的Chann ...
- HTTP协议初级入门
Http = HyperText Transfer Protocol即超文本传输协议 HTTPS = Hyper Text Transfer Protocol over Secure Socket L ...