201521123027 <java程序设计>第十二周作业总结
1.本周学习总结
1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容。

2.书面作业
将Student对象(属性:int id, String name,int age,double grade)写入文件student.data、从文件读出显示。
Q1. 字符流与文本文件:使用 PrintWriter(写),BufferedReader(读)
1.1 生成的三个学生对象,使用PrintWriter的println方法写入student.txt,每行一个学生,学生的每个属性之间用|作为分隔。使用Scanner或者BufferedReader将student.txt的数据读出。(截图关键代码,出现学号)
//201521123027
Student类:
public void writeData(PrintWriter out)
{
out.println(id + "|" + name + "|" + age + "|" + grade );
}
public void readData(Scanner in)
{
String line = in.nextLine();
String[] tokens = line.split("\\|");
id =Integer.parseInt(tokens[0]);
name =tokens[1];
age = Integer.parseInt(tokens[2]);
grade = Double.parseDouble(tokens[3]);
}
Main函数:
try
{
// save all employee records to the file employee.txt
PrintWriter out = new PrintWriter("student.txt");
writeData(stu, out);
out.close();
// retrieve all records into a new array
Scanner in = new Scanner(new FileReader("student.txt"));
Student[] newStaff = readData(in);
in.close();
for (Student e : newStaff)
System.out.println(e);
}
catch (IOException exception)
{
exception.printStackTrace();
}
}
private static void writeData(Student[] students, PrintWriter out) throws IOException
{
out.println(students.length);
for (Student e : students)
e.writeData(out);
}
private static Student[] readData(Scanner in)
{
int n = in.nextInt();
in.nextLine();
Student[] students = new Student[n];
for (int i = 0; i < n; i++)
{
students[i] = new Student();
students[i].readData(in);
}
return students;
}
1.2 生成文件大小多少?分析该文件大小

生成文件大小:50字节
分析:第一行的“3”代表数组的大小,占3个字节;一个id占1个字节,共占3个字节;英文字符串每个字母占1个字节,故共占11个字节;age占2个字节,共6个字节;grade占4个字节,共占12个字节;分隔符有3个,共占3个字节;行末尾共占2个字节。
1.3 如果调用PrintWriter的println方法,但在后面不close。文件大小是多少?为什么?
0字节
close方法中会自动调用flush()函数,flush()函数作用为清空缓冲区数据。若调用PrintWriter的println方法,但在后面不close的话,缓冲区中的数据就会丢失。
Q2. 缓冲流
2.1 使用PrintWriter往文件里写入1千万行(随便什么内容都行),然后对比使用BufferedReader与使用Scanner从该文件中读取数据的速度(只读取,不输出),使用哪种方法快?请详细分析原因?提示:可以使用junit4对比运行时间

BufferedReader是在字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取,使用缓冲可以减少IO次数。读取数据的速度要比Scanner块。
2.2 将PrintWriter换成BufferedWriter,观察写入文件的速度是否有提升。记录两者的运行时间。试分析原因。

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

出现乱码;因为FileReader会按照系统默认的字符集(如GBK)来解码,但是EncodeTest.txt 文件使用了UTF-8编码。将UTF-8编码的字符使用GBK编码来解析,会出现乱码情况。
解决方法:

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

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




4.2 生成的文件有多大?分析该文件大小?将该文件大小和题目1生成的文件对比是大了还是小了,为什么?
生成文件大小:65字节
分析:一个int型4字节,id和age共24字节;一个double型8字节,grade共24字节;一个英文字符1字节,name共11字节;一个标识符2字节,共6字节;故文件大小为65字节。
将该文件大小和题目1生成的文件对比是大了。因为DataOutputStream写入文件是按照不同的数据类型写入,每个数据类型占一定的大小,如int占4个字节。
4.3 使用wxMEdit的16进制模式(或者其他文本编辑器的16进制模式)打开student.data,分析数据在文件中是如何存储的。


4.4 使用ObjectInputStream(读), ObjectOutputStream(写)读写学生。(截图关键代码,出现学号)
//201521123027
ObjectOutputStream out =new ObjectOutputStream(new FileOutputStream("student.txt"));
out.writeObject(student);
out.close();
ObjectInputStream in =new ObjectInputStream(new FileInputStream("student.txt"));
Student[] newStudent =(Student[]) in.readObject();
in.close();
for(Student e: newStudent)
System.out.println(e);
Q5. Scanner基本概念组装对象
编写public static List readStudents(String fileName)从fileName指定的文本文件中读取所有学生,并将其放入到一个List中。应该使用那些IO相关的类?说说你的选择理由。

运行结果:

FileInputStream:从文件中读取数据;
InputStreamReader:读UTF-8格式的文件;
BufferedReader:使用缓冲技术,读取速度更快;
Q7. 文件操作
编写一个程序,可以根据指定目录和文件名,搜索该目录及子目录下的所有文件,如果没有找到指定文件名,则显示无匹配,否则将所有找到的文件名与文件夹名显示出来。
7.1 编写public static void findFile(String path,String filename)函数,以path指定的路径为根目录,在其目录与子目录下查找所有和filename相同的文件名,一旦找到就马上输出到控制台。(截图关键代码,出现学号)
关键代码:

运行结果:

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

运行结果:

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

运行结果:

3.码云及PTA
3.1码云代码提交记录

3.2PTA提交截图

201521123027 <java程序设计>第十二周作业总结的更多相关文章
- 201871010106-丁宣元 《面向对象程序设计(java)》第十二周学习总结
201871010106-丁宣元 <面向对象程序设计(java)>第十二周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://home.cnblogs.com/u/nw ...
- 《Java程序设计》十四次作业
<Java程序设计>十四次作业实验总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结与数据库相关内容. 3. 代码量统计 周次 总代码量 新增代码量 总文件数 新增 ...
- 2017-2018-1 《Linux内核原理与设计》第十二周作业
<linux内核原理与设计>第十二周作业 Sql注入基础原理介绍 分组: 和20179215袁琳完成实验 一.实验说明 SQL注入攻击通过构建特殊的输入作为参数传入Web应用程序,而这 ...
- 201621123080《java程序设计》第六周作业总结
201621123080<java程序设计>第六周作业总结 1. 本周学习总结 2. 书面作业 clone方法 1.1 在test1包中编写Employee类,在test2包中新建一个Te ...
- 2019-2020-1 20199329《Linux内核原理与分析》第十二周作业
<Linux内核原理与分析>第十二周作业 一.本周内容概述: 通过编程理解 Set-UID 的运行机制与安全问题 完成实验楼上的<SET-UID程序漏洞实验> 二.本周学习内容 ...
- 201771010134杨其菊《面向对象程序设计java》第十二周学习总结
第十二周学习总结 第一部分:理论知识 内容概要: AWT与Swing简介:框架的创建:图形程序设计: 显示图像: 1.AWT组件: 2.Swing 组件层次关系 3 .AWT与Swing的关系:大部分 ...
- 第十二周作业_PSP总结报告
回顾1 (1)回想一下你曾经对计算机专业的畅想 当初你是如何做出选择计算机专业的决定的?经过一个学期,你的看法改变了么,为什么? 你认为过去接触到的课程是否符合你对计算机专业的期待,为什么?经过一个学 ...
- 201621123005《Java程序设计》第三周作业学习总结
201621123005<Java程序设计>第三周 学习总结 标签(空格分隔): 未分类 1. 本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化 ...
- 马凯军201771010116《面向对象与程序设计Java》第十二周学习总结
一.理论与知识学习部分 Java的抽象窗口工具箱(Abstract Window Toolkit, AWT)包含在java.awt包中,它提供了许多用来设计GUI的组件类和容器类. 大部分AWT组件都 ...
随机推荐
- WAMP环境 apache 2.4.23 局域网访问
参考了很多大神的分享解答, 现在不知道是参考的哪个人的 如有抄袭 侵权请告知, 加上链接或者删除!!! 最近想按个分屏提高学习代码效率, 晚上突然想到可以用本本连接WiFI 然后通过 局域网访问PC ...
- mac 辅助接口
mac 辅助接口1.打开文件所在目录并选中该文件2.获取plist属性值3.系统关机4.打开系统网络设置5.字符串包含比较6.系统挂载数及挂载盘符信息 //====================== ...
- win7(iis7)无法加载运行CSS和图片的解决方法
今天刚刚在公司的电脑安装了window7并配置了iis7,打开网站户发现结构混乱,图片不显示,但是内容显示完全没有问题,也没有出错. 一开始以为是和IIS6的MIME一样,没有添加到相应项目的原因,但 ...
- asp.net core MVC 全局过滤器之ExceptionFilter异常过滤器(一)
本系类将会讲解asp.net core MVC中的内置全局过滤器的使用,将分为以下章节 asp.net core MVC 过滤器之ExceptionFilter异常过滤器(一) asp.net cor ...
- JavaScript 加号运算符详解
将介绍JavaScript中 '+'加号运算符在一元.二元运算时的表现. 目录 1.一元运算符 2. 二元运算符 1. 一元运算符 语法: + Expression 说明:'+'号运算符作为一元运算符 ...
- angularjs select一些坑
用select下拉框时,很容易出现第一个默认选择框是空白的情况. 就像这样: 平常我们可以在options中设置selected属性达到默认选择的目的. 同样的,我们可以在控制器中写入select的初 ...
- 【windows】常用快捷键
浏览器 ctrl shift del 清除网页缓存 文件系统 win+e 打开文件窗口 win+r 运行命令窗口 win+l 锁定桌面 win+m 最小化窗口 ctrl+shift +n 创建文件夹
- windows转储文件(dmp)
1. 何为转储文件 转储文件也就是我们常说的dump文件.可以把转储文件看成软件的某个时刻的一个快照.转储文件一般都是在软件出现问题时手动生成或者程序自动生成.下面我们介绍几种生成转储文件的 ...
- TF-IDF模型详解
1. 理论基础 由于数据挖掘所有数据都要以数字形式存在,而文本是以字符串形式存在.所以进行文本挖掘时需要先对字符串进行数字化,从而能够进行计算.TF-IDF就是这样一种技术,能够将字符串转换为数字,从 ...
- Java并发包中CopyOnWrite容器相关类简介
简介: 本文是主要介绍,并发容器CopyOnWriteArrayList和CopyOnWriteArraySet(不含重复元素的并发容器)的基本原理和使用示例. 欢迎探讨,如有错误敬请指正 如需转载, ...