1. 本周学习总结

1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容。

2. 书面作业

1.将Student对象(属性:int id, String name,int age,double grade)写入文件student.data、从文件读出显示。

字符流与文本文件:使用 PrintWriter(写),BufferedReader(读)

1.1 生成的三个学生对象,使用PrintWriter的println方法写入student.txt,每行一个学生,学生的每个属性之间用|作为分隔。使用Scanner或者BufferedReader将student.txt的数据读出。(截图关键代码,出现学号)

1.2 生成文件大小多少?分析该文件大小

答:生成文件大小为51字节;每个数字或者字符占一个字节,一个汉字占2个字节,换行标志是 "\r\n"。所以大小为3+3*16=51字节。

1.3 如果调用PrintWriter的println方法,但在后面不close。文件大小是多少?为什么?

答:0字节,如果后面没有close,会导致文件未保存,进而导致数据丢失。

2.缓冲流

2.1 使用PrintWriter往文件里写入1千万行(随便什么内容都行),然后对比使用BufferedReader与使用Scanner从该文件中读取数据的速度(只读取,不输出),使用哪种方法快?请详细分析原因?提示:可以使用junit4对比运行时间

BufferedReader:238ms
Scanner:5872ms

答;BufferedReader比Scanner的速度快很多,因为BufferedReader是先把数据读到缓存区后再写到硬盘里,可以减少I/O操作,所以效率更高。

2.2 将PrintWriter换成BufferedWriter,观察写入文件的速度是否有提升。记录两者的运行时间。试分析原因

参考:本题具体要求见流与文件实验任务书-题目1-2.1到2.3

PrintWriter:1091ms
BufferedWriter:347ms

答:也是BufferedWriter使用了缓冲,使效率提升很多。

3.字符编码

3.1 现有EncodeTest.txt 文件,该文件使用UTF-8编码。使用FileReader与BufferedReader将EncodeTest.txt的文本读入并输出。是否有乱码?为什么会有乱码?如何解决?(截图关键代码,出现学号)

关键代码:


public static void main(String[] args) throws Exception { //201521123031
FileReader a = new FileReader("EncodeTest.txt");
BufferedReader b = new BufferedReader(a);
try {
String line = null;
while((line = b.readLine())!= null)
System.out.println(line);
} finally {
if(b!=null) {
b.close();
}
}
}

答:会出现乱码,因为eclipse默认使用GBK编码,原文件使用的是UTF-8编码格式。修改如下:

public static void main(String[] args) throws Exception {
// 201521123044
BufferedReader b =null;
try {
FileInputStream m = new FileInputStream("EncodeTest.txt");
InputStreamReader n = new InputStreamReader(m,"UTF-8");
b = new BufferedReader(n);
String line = null;
while((line = b.readLine())!=null)
System.out.println(line); } finally {
if(b!=null) {
b.close();
}
}
}

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

参考:InputStreamReaderTest.java与教学PPT

关键代码:

public static void convertGBK2UTF8(String src, String dst) throws IOException {
// 201521123044
BufferedReader b = null;
OutputStreamWriter out = null;
BufferedWriter outfile = null;
try {
b = new BufferedReader(new InputStreamReader(new FileInputStream(src),"UTF-8"));
out = new OutputStreamWriter(new FileOutputStream(dst),"UTF-8");
outfile = new BufferedWriter(out);
String line =null;
while((line = b.readLine())!=null) {
outfile.write(line);
outfile.newLine();
} }finally {
if(b!=null) {
b.close();
outfile.close();
}
}
}

4.字节流、二进制文件:DataInputStream, DataOutputStream、ObjectInputStream

4.1 参考DataStream目录相关代码,尝试将三个学生对象的数据写入文件,然后从文件读出并显示。(截图关键代码,出现学号)

4.2 生成的文件有多大?分析该文件大小?将该文件大小和题目1生成的文件对比是大了还是小了,为什么?

答:生成文件66字节,比题目1生成的文件大,因为这两个文件是按照不同的数据类型写入。一个int型4字节,一个double型8字节,一个汉字占2个字节,行末尾占2个字节,一个学生一共22字节,最后三个学生相加为66字节。

4.3 使用wxMEdit的16进制模式(或者其他文本编辑器的16进制模式)打开student.data,分析数据在文件中是如何存储的。

4.4 使用ObjectInputStream(读), ObjectOutputStream(写)读写学生。(截图关键代码,出现学号) //参考ObjectStreamTest目录

参考:本题具体要求见流与文件实验任务书-题目1-1

//201521123031
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("student.txt"));
out.wirteObject(student);
out.close();
objectInputStream in = new objectInputStream(new FileOutputStream("student.txt"));
Student[] new Student = (Student[])in.readOject();
in.close;
for(Student e :new Student)
System.out.println(e);

5.基本概念

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

实验文件:Students.txt

参考:TextFileTest目录下TextFileTest.java

答:BufferedReader提高读取效率,代码如下:

public static List<Student> readStudents(String fileName)
{
ArrayList<Student> stu=new ArrayList<Student>();
BufferedReader bf=new BufferedReader(fileName);
String str=bf.readLine();
while(str!=null);
{
String[] mes=str.split(" ");
int id=Integer.parseInt(mes[0]);
int name=mes[1];
int age=Integer.parseInt(mes[2]);
double grade=Double.parseDouble(mes[3]);
stu.add(new(id,name,age,grade));
str=bf.readLine();
}
bf.close();
return stu;
}

7.文件操作

编写一个程序,可以根据指定目录和文件名,搜索该目录及子目录下的所有文件,如果没有找到指定文件名,则显示无匹配,否则将所有找到的文件名与文件夹名显示出来。

7.1 编写public static void findFile(String path,String filename)函数,以path指定的路径为根目录,在其目录与子目录下查找所有和filename相同的文件名,一旦找到就马上输出到控制台。(截图关键代码,出现学号)

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

参考代码:FindDirectories.java

参考:本题具体要求见流与文件实验任务书-题目2

8.正则表达式

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

3. 码云及PTA

3.1. 码云代码提交记录

在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

3.2 PTA以前未完成的题目

截图

201521123031 《Java程序设计》第12周学习总结的更多相关文章

  1. 2018面向对象程序设计(Java)第12周学习指导及要求

    2018面向对象程序设计(Java)第12周学习指导及要求 (2018.11.15-2018.11.18)   学习目标 (1) 掌握Java GUI中框架创建及属性设置中常用类的API: (2) 掌 ...

  2. 面向对象程序设计(JAVA) 第12周学习指导及要求

    2019面向对象程序设计(Java)第12周学习指导及要求 (2019.11.15-2019.11.18)   学习目标 (1) 掌握Vetor.Stack.Hashtable三个类的用途及常用API ...

  3. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  4. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  5. 20175209 《Java程序设计》第九周学习总结

    20175209 <Java程序设计>第九周学习总结 一.教材知识点总结 有关数据库下载中存在可能出现的问题已经在博客<数据库安装和使用过程中出现的一些问题>给出了相应的解决办 ...

  6. 20175221 2018-2019-2 《Java程序设计》第一周学习总结

    20175221 2018-2019-2 <Java程序设计>第一周学习总结 教材学习内容总结 本周通过观看书本配套视频,学到了如解释器,编译器等一些简单概念. 还懂得了java的一些简单 ...

  7. 20175204 张湲祯 2018-2019-2《Java程序设计》 第一周学习总结

    20175204 张湲祯 2018-2019-2<Java程序设计>第一周学习总结 教材学习内容总结 -第一章Java入门要点: -Java的地位:具有面向对象,与平台无关,安全稳定和多线 ...

  8. 20175227张雪莹 2018-2019-2 《Java程序设计》第九周学习总结

    20175227张雪莹 2018-2019-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十一章 JDBC数据库操作 MySQL数据库管理系统 下载安装MySQL 若下载的是 ...

  9. 20175314 《Java程序设计》第九周学习总结

    20175314 <Java程序设计>第九周学习总结 教材学习内容总结 根据课本的介绍下载了MySQL和Navicat for MySQL并成功对后者进行破解 MySQL客户端管理工具(如 ...

  10. 20175234 2018-2019-2 《Java程序设计》第九周学习总结

    目录 20175234 2018-2019-2 <Java程序设计>第九周学习总结 教材学习内容总结 教材学习中的问题和解决过程 代码托管 感想 学习进度条 参考资料 20175234 2 ...

随机推荐

  1. ubuntu 16.04下安装使用OpenCV2.4.13

    本来项目是在Windows下写的,结果对接的时候发现要在Linux下实现,没办法只能重新移植了.以前在ubuntu上使用过OpenCV,可惜系统已经重新安装过,只能重新来一遍了,索性就记录一下安装过程 ...

  2. java子类和父类中静态块、非静态块、构造函数的执行顺序

    public class qqqq extends Parent{ public static void main(String[] args) { new Child(); } } class Pa ...

  3. HTK语音识别示例(Ubuntu)

    一.简介 HTK(Hidden Markov Model Toolkit)是一款语音识别工具包,诞生于Cambridge University Engineering Department (CUED ...

  4. oracle中如何移动数据文件

    a.shutdown immediate关闭数据库  b.在os下拷贝数据文件到新的地点  c.Startup mount 启动到mount下  d.Alter database rename fil ...

  5. 也来谈谈IT培训

    园子里这篇博客火了:谈谈培训机构的"骗局"给新人一些建议,刚好我也一直被问到这个话题,今天就凑个热闹,一吐为快吧. 我从包工头转行做开发,是进了培训班的,但两年的课程,我只学了半年 ...

  6. poj 1182 食物链 带权并查集

    食物链是并查集的进阶运用的一道非常经典的题目. 题目如下: 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A, ...

  7. C++读取csv表格文件到vector

    这个CSV文件假设知道每行有多少个数,也知道数据的格式,即可使用下面简单的方法实现. 我们假设每行有4个数据,依次是int,int,float,float 基本思路是:把每行的数据定为一个类型,放在v ...

  8. MySql-python的API手记

    --------------------python控制mysql的API--------------------#import MySQLdb:引用对应的开发包#conn=MySQLdb.conne ...

  9. poj 1200字符串hash

    题意:给出不同字符个数和子串长度,判断有多少个不同的子串 思路:字符串hash. 用字符串函数+map为什么会超时呢?? 代码: #include <iostream> #include ...

  10. ant安装以及环境变量配置、验证

    (一)安装 ant 下载地址: http://ant.apache.org/     根据自己电脑下载对应版本 下载完成以后,可自行解压到自己常用的盘中,但是要记住解压到哪里了,以便后续的环境变量配置 ...