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程序设计>第十二周作业总结的更多相关文章

  1. 201871010106-丁宣元 《面向对象程序设计(java)》第十二周学习总结

    201871010106-丁宣元 <面向对象程序设计(java)>第十二周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://home.cnblogs.com/u/nw ...

  2. 《Java程序设计》十四次作业

    <Java程序设计>十四次作业实验总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结与数据库相关内容. 3. 代码量统计 周次 总代码量 新增代码量 总文件数 新增 ...

  3. 2017-2018-1 《Linux内核原理与设计》第十二周作业

    <linux内核原理与设计>第十二周作业 Sql注入基础原理介绍 分组: 和20179215袁琳完成实验 一.实验说明   SQL注入攻击通过构建特殊的输入作为参数传入Web应用程序,而这 ...

  4. 201621123080《java程序设计》第六周作业总结

    201621123080<java程序设计>第六周作业总结 1. 本周学习总结 2. 书面作业 clone方法 1.1 在test1包中编写Employee类,在test2包中新建一个Te ...

  5. 2019-2020-1 20199329《Linux内核原理与分析》第十二周作业

    <Linux内核原理与分析>第十二周作业 一.本周内容概述: 通过编程理解 Set-UID 的运行机制与安全问题 完成实验楼上的<SET-UID程序漏洞实验> 二.本周学习内容 ...

  6. 201771010134杨其菊《面向对象程序设计java》第十二周学习总结

    第十二周学习总结 第一部分:理论知识 内容概要: AWT与Swing简介:框架的创建:图形程序设计: 显示图像: 1.AWT组件: 2.Swing 组件层次关系 3 .AWT与Swing的关系:大部分 ...

  7. 第十二周作业_PSP总结报告

    回顾1 (1)回想一下你曾经对计算机专业的畅想 当初你是如何做出选择计算机专业的决定的?经过一个学期,你的看法改变了么,为什么? 你认为过去接触到的课程是否符合你对计算机专业的期待,为什么?经过一个学 ...

  8. 201621123005《Java程序设计》第三周作业学习总结

    201621123005<Java程序设计>第三周 学习总结 标签(空格分隔): 未分类 1. 本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化 ...

  9. 马凯军201771010116《面向对象与程序设计Java》第十二周学习总结

    一.理论与知识学习部分 Java的抽象窗口工具箱(Abstract Window Toolkit, AWT)包含在java.awt包中,它提供了许多用来设计GUI的组件类和容器类. 大部分AWT组件都 ...

随机推荐

  1. C#多线程的用法5-线程间的协作Monitor

    之前我们使用lock快捷方式,实现了多线程对同一资源的共享.在C#中lock实际上是Monitor操作的简化版本. 下面使用Monitor来完成之前的lock功能,你可以在此做一下对照: privat ...

  2. OpenCms模块创建图解

    登录OpenCms后,切换到"管理(Administration)"视图,点击"模块管理",这时窗口显示已安装模块的列表. 确定当前不在"online ...

  3. fedora20 安装搜狗输入法及各种问题的解决

    http://blog.csdn.NET/g457499940/article/details/38656719 0 环境描述: 系统环境:Fedora20 64位 截止2014年09月 8日17:5 ...

  4. testNG java.net.SocketException: Software caused connection abort: socket write error

    执行用例报错,提示 java.net.SocketException: Software caused connection abort: socket write error java.net.So ...

  5. Java中的继承性特性

    继承性是java中的第二特性之一.而继承性最为关键的地方为:代码重用性的问题,利用继承性可以从已有的类中继续派生出新的子类,也可以利用子类扩展出更多的操作功能. 继承性的实现代码为:class 子类 ...

  6. Java web轻量级开发面试教程读书笔记:数据库方面,如何准备面试

    如果在面试或与资深人事交流的过程中,你能有效合理地展示出本章所给出的一些知识点,那么对你的评价就会是"对数据库有深入了解",甚至能加上"有设计数据表的经验",即 ...

  7. H5输入框实时记录文字个数

    需求: 移动端用户反馈功能,有的用户反馈功能是有字数限制的,比如限制为200字 解决方法: 在项目中我们使用的Vue框架,所以可以直接进行绑定,代码如下 <section class=" ...

  8. win10的power shell可以学习少部分linux命令_功能与cmd类似

    更新帮助文件:

  9. zabbix上监控docker

    说明 第一种方案,借助docker的python版的api,然后通过自己封装自定义脚本来做,稍微麻烦点,但是可以达到个人自定义的效果. 第二种借助国外的一位大神已经封装好的模板来做,简单省事情,不过功 ...

  10. Spring加载properties文件的属性的值

    要使用配置文件的值首先在spring.xml配置加载properties文件 <context:property-placeholder location="classpath:ife ...