1. 本章学习总结

2. 书面作业

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

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

Student[] students=new Student[3];
students[0]=new Student(1,"lin",10,1);
students[1]=new Student(2,"chen",10,1);
students[2]=new Student(3,"zhang",10,1);
OutputStream os=new FileOutputStream("student.txt");
PrintWriter pw=new PrintWriter(os);
for(int i=0;i<3;i++)
{
String str=students[i].id+"|"+students[i].name+"|"+students[i].age+"|"+students[i].grade;
pw.println(str);
} pw.close();
os.close(); InputStream is=new FileInputStream("student.txt");
InputStreamReader isr=new InputStreamReader(is);
BufferedReader br=new BufferedReader(isr); String info=null;
info=br.readLine();
while(info!=null){
System.out.println(info);
info=br.readLine();
}
br.close();
isr.close();
is.close();
//201521123019

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

45字节。
1*3+2*3+1*3+3*3+2*3+3+4+5=45

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

生成0字节文件,因为调用PrintWriter的println方法,但在后面不close的话,缓冲区中的数据会丢失。

Q2.缓冲流

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

BufferedReader:422ms
Scanner:8754ms
BufferedReader快,因为先访缓冲区,在访问磁盘,可以减少IO操作次数。

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

PrintWriter:2246ms
BufferedWriter:813ms
速度有提升,因为使用缓冲区存储数据,可以减少底层I/O操作的次数。

Q3.字符编码

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

http://images2015.cnblogs.com/blog/1109703/201705/1109703-20170513140430863-1256665777.png

http://images2015.cnblogs.com/blog/1109703/201705/1109703-20170513140233113-1666323026.png

出现乱码,因为原EncodeTest文件是UTF-8编码格式,而eclipse默认使用GBK编码,解码出现错误

解决方法如下:

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

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

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

FileOutputStream fos = new FileOutputStream("student.txt");

DataOutputStream dos = new DataOutputStream (fos);

try

{

    for(int i=0;i<3;i++)
{
dos.writeInt(students[i].getId());
dos.writeInt(students[i].getAge());
dos.writeDouble(students[i].getGrade());
dos.writeUTF(students[i].getName()); }
}
finally
{
dos.close();
} FileInputStream fis = new FileInputStream("student.txt");
DataInputStream dis = new DataInputStream(fis);
try
{
for(int i=0;i<3;i++)
{
System.out.println(dis.readInt()+"|"+dis.readInt()+"|"+dis.readDouble()+"|"+dis.readUTF());
}
}
finally
{
dis.close();
}
//20521123019

结果:

1|10|1.0|lin
2|10|1.0|chen
3|10|1.0|zhang

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

66字节,变大了
4*3+4*3+8*3+5+6+7=66
因为DataOutputStream写入文件是按照不同的数据类型写入,每个数据类型占一定的大小。

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

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

//201521123019
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基本概念组装对象

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

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;
}
BufferedReader提高读取效率

Q7. 文件操作

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

Q8.正则表达式

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

3.码云及PTA

3.1. 码云代码提交记录

201521123019 《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. 老司机和你深聊 Kubenertes 资源分配之 Request 和 Limit 解析

    欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:腾讯云容器服务团队 Kubernetes是一个容器集群管理平台,Kubernetes需要统计整体平台的资源使用情况,合理地将资源分配 ...

  2. JackSon将java对象转换为JSON字符串

    JackSon可以将java对象转换为JSON字符串,步骤如下: 1.导入JackSon 的jar包 2.创建ObjectMapper对象 3.使用ObjectMapper对象的writeValueA ...

  3. 【Centos7】安装memcached

    1.Linux系统安装memcached,首先要先安装libevent库. 安装libevent库有两种方式 (1)rpm安装 yum install libevent libdeve (2)源码包安 ...

  4. Wo Wei Shen Me Hui Zai cnblogs Xie Bo Ke

    我为什么会在cnblogs上写博客.. CSDN上我上传过代码被很多网友下载过.CSDN我申请过博客.也写过几篇博客. 开源中国 我上传过代码.代码也被网友下载过.OSChina我申请过博客.也写过几 ...

  5. oracle之备份详解

    1.冷备份(执行冷备份前必须关闭数据库) 物理备份(备份物理数据库文件) 2.热备份(热备份是当数据库正在运行时进行数据备份的过程.执行热备份的前提是:数据库运行在可归档日志模式.适用于24X7不间断 ...

  6. python汉字输出编码问题

    python中文输出乱码问题困扰了多少初学者,我在这方面栽了不知道多少跟头.现在我把我碰到的问题和解决的方法写出来与大家分享一下: 1输出乱码 所谓的乱码是指“鎴戞槸涓枃瀛楃涓”这样的内容.为什么 ...

  7. 最大流isap模板

    isap+bfs初始化+栈优化,点的编号从0开始: ; ; const int INF = 0x3f3f3f3f; struct Edge { int to, next, cap, flow; }ed ...

  8. Eclipse常用快捷键和调试方法

    原文链接:http://my.oschina.net/u/1054538/blog/741561 常用快捷键 Eclipse最全快捷键,熟悉快捷键可以帮助开发事半功倍,节省更多的时间来用于做有意义的事 ...

  9. LinkedList的源码分析

    1. LinkedList的定义  1.1  继承于AbstractSequentialList的双向链表,可以被当作堆栈.队列或双端队列进行操作 1.2  有序,非线程安全的双向链表,默认使用尾部插 ...

  10. NPOI office 组件资料汇总 (excel, word)

    POI 是一套用Java写成的库,能够帮助开发者在没有安装微软Office的情况下读写Office 的文件,支持的文件格式包括xls, doc, ppt等. NPOI 是POI的.net 版本. 最新 ...