1. 本周学习总结

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

2. 书面作业

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

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

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

答:

//201521123001
Student[] students=new Student[3];
students[0]=new Student(1,"张三",19,65);
students[1]=new Student(2,"李四",19,75);
students[2]=new Student(3,"王五",20,85);
PrintWriter printWriter = new PrintWriter(new FileOutputStream("d:/student.txt"));
writeData(student, printWriter);
printWriter.close;
Scanner in = new Scanner(new FileReader("d:/student.txt"));
Student[] newStudent = readData(in);
in.close();
for (Student e : newStudent)
System.out.println(e);

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

答:

num 1字节4

name 4字节
3

age 2字节3

score 4字节
3

分隔符 3字节3

换行符 2字节
4

共51字节

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

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

参考代码:TextFileTest.java

答:0字节,因为PrintWriter的println方法将数据写到缓冲区中,还没有存入文件,只有调用flush方法的时候会强制将缓冲区中的数据写入文件,调用close时将自动调用flush,所以没有close时数据就丢失在缓冲区里了。

2. 缓冲流

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

答:用BufferedReader比用Scanner从该文件中读取数据的速度快很多,因为BufferedReader利用缓冲区减少I/O次数,可以在读取一定量内容以后再对文件进行操作。

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

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

参考代码:BufferedReaderTest.java

JUnit4常用注解

JUnit4学习

答:有提升,因为BufferedWriter利用了缓冲区减少I/O次数。

3. 字符编码

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

答:



有乱码,因为FileReader是按系统默认字符来解码的,可以用BufferedReader手动选择字符编码。

//201521123001
public static void main(String[] angs) throws IOException { BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(new FileInputStream("EncodeTest.txt"), "UTF-8"));
String line = null;
while ((line = bufferedReader.readLine() != null) {
System.out.println(line);
}
bufferedReader.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 {
BufferedReader bufferedReader = new BufferedReader(new FileReader(src), "UTF-8");
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream(dst), "UTF-8");
String line = null;
while ((line = bufferedReader.readLine()) != null) {
outputStreamWriter.write(line);
outputStreamWriter.newLine;
}
bufferedReader.close();
outputStreamWriter.close();
}

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

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

答:

//201521123001

    DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("student.data")));
writeData(students, dos);
dos.close(); DatalnputStream dis= new DataInputStream(new BufferedInputStream(new FileInputStream("student.data");
Student[] newStudent=readData(dis);
System.out.println(newStudent.length); for (Student student : newStudent) {
System.out.printIn(student);
}
dis.close();

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

答:

变大了,因为用UTF-8编码存储文件,所占字节数变大了。

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

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

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

答:

//201521123001
try{
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("student.txt"));
out.writeObject(student);
out.close();
ObjectlnputStneam in = new ObjectInputStneam(new FileInputStneam("student.txt"));
Student[] newStudent = (Student[]) in.readObject();
in.close();
for (Student e : newStudent)
System.out.printIn(e);
}
catch(Exception e){
e.printStackTrace();
}

5. Scanner基本概念组装对象

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

实验文件:Students.txt

参考:TextFileTest目录下TextFileTest.java

答:

public static List<Student> readStudents (String fileName) throws IOException{
ArrayList<Student>student = new ArrayList<Student>();
try{
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader (new FilelnputStream("Student.txt"),"UTF-8"));
String string=null;
while((string=bufferedReader.readLine())!=null){
String[] str = string.split(" ");
int num =Integer.parselnt (str[0]);
int age =Integer.parselnt(str[2]);
double score = Double.parseDouble(str[3]);
student.add (new Student (num , str[1] , age , score));
}
catch(IOException e){
e.printStackTrace();
}
finally{
if(bufferedReader!=null)
bufferedReader.close();
}
return student;
}

7. 文件操作

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

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

答:

//201521123001
public static void findFile(String path,String fileName) {
File file1 = new File(path);
String[] str = file1.list(); for(String str : str) {
File file2 = new File(file1.getAbsolutePath(), str);
if(string.equals(fileName)) {
system.out.println(file1.getAbsolutePath());
}
if(file2.isDirectory()) {
findFile(file2.getAbsolutePath(), fileName);
}
}
}

8. 正则表达式

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

答:

public static boolean check (String string) {
for(int i = 0 ; i < string.length() ; i++) {
char ch = string.charAt(i);
if(ch%1!=0)
return false;
}
return true;
}

3. 码云及PTA

3.1. 码云代码提交记录

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

201521123001《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. OpenGL与CUDA互操作方式总结

    一.介绍 CUDA是Nvidia推出的一个通用GPU计算平台,对于提升并行任务的效率非常有帮助.本人主管的项目中采用了OpenGL做图像渲染,但是在数据处理方面比较慢,导致帧率一直上不来.于是就尝试把 ...

  2. 从源码理解Spring原理,并用代码实现简易Spring框架

    前言(本文为原创,转载请注明出处) 个人之前对于框架的学习,就停留在配置,使用阶段.说实话过段时间就会忘得荡然无存.也不知道框架的运行逻辑,就是知道添加个注解,就可以用了. 由于实习,时间比较多,也感 ...

  3. Clang之语法抽象语法树AST

    语法分析器的任务是确定某个单词流是否能够与源语言的语法适配,即设定一个称之为上下文无关语言(context-free language)的语言集合,语法分析器建立一颗与(词法分析出的)输入单词流对应的 ...

  4. 【Tomcat】Invalid character found in the request target

    Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC ...

  5. 转载>>>Jpgraph图表

    一.开启GD库 Jpgraph需要GD库的支持,所以在调式JpGraph之前,确保GD库已开启,这很重要,不然后面的工作就没办法展开了.GD库在PHP5中是被默认安装的,我们只需开启GD库就可以了. ...

  6. 学习CSS记录:选择符优先级

    1.标有!important 关键字声明属性. 2.HTML中的CSS样式属性. 3.作者编辑的CSS文件模式属性. 4.用户设置的样式. 5.浏览器默认的样式. ------------------ ...

  7. for循环 + setTimeout 结合的烂大街的面试题

    零.背景 最近在翻看以前的老书<node.js开发指南>,恰好碰到for循环 + setTimeout的经典例子,于是重新梳理了思路并记录下. 一.写在前面,setTimeout和setI ...

  8. Windows下JNI的使用教程

    JNI的使用大致有以下4个步骤: 一.在Java中写native方法 二.用javah命令生成C/C++头文件 三.写对应的C/C++程序实现头文件中声明的方法,并编译成库文件 四.在Java中加载这 ...

  9. Django 后台支持中文方法

    今天遇到的一个问题,mark一下: django后台可以支持中文界面,一开始一直纠结于settings.py 中 LANGUAGE_CODE = 'en-us'中的'en-us'该更改成什么.zh-c ...

  10. 认清Javascript的地位并编写合理的Javascript代码

    作为前端程序员,一定要认清javascript的地位,不要被它乱七八糟的特点所迷惑.JavaScript主要是用来操控和重新调整DOM,通过修改DOM结构,从而达到修改页面效果的目的. 要用这个中心思 ...