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的数据读出。(截图关键代码,出现学号)

  1. Student[] students=new Student[3];
  2. students[0]=new Student(1,"lin",10,1);
  3. students[1]=new Student(2,"chen",10,1);
  4. students[2]=new Student(3,"zhang",10,1);
  5. OutputStream os=new FileOutputStream("student.txt");
  6. PrintWriter pw=new PrintWriter(os);
  7. for(int i=0;i<3;i++)
  8. {
  9. String str=students[i].id+"|"+students[i].name+"|"+students[i].age+"|"+students[i].grade;
  10. pw.println(str);
  11. }
  12. pw.close();
  13. os.close();
  14. InputStream is=new FileInputStream("student.txt");
  15. InputStreamReader isr=new InputStreamReader(is);
  16. BufferedReader br=new BufferedReader(isr);
  17. String info=null;
  18. info=br.readLine();
  19. while(info!=null){
  20. System.out.println(info);
  21. info=br.readLine();
  22. }
  23. br.close();
  24. isr.close();
  25. is.close();//201521123108

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

答:生成文件大小为64字节

  1. students[0]=id(1)+name(3)+age(2)+grade(1)+"|"(3)+/n(2)
  2. students[1]=id(1)+name(4)+age(2)+grade(1)+"|"(3)+/n(2)
  3. students[2]=id(1)+name(5)+age(2)+grade(1)+"|"(3)+/n(2)

合计64字节

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

答:0个字节,close方法的作用是关闭PrintWriter,并刷新。若无close,写在缓冲区上的数据会被清空。

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

参考代码:TextFileTest.java

Q2. 缓冲流

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

答:



BufferedReader是在字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取,使用缓冲可以减少IO次数。读取数据的速度要比Scanner块。

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

答:写入文件的速度有提升,因为BufferedWriter使用了缓冲技术。

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

参考代码:BufferedReaderTest.java

JUnit4常用注解

JUnit4学习

Q3. 字符编码

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

答:

  1. //201521123108
  2. InputStream is=new FileInputStream("EncodeTest.txt");
  3. InputStreamReader isr=new InputStreamReader(is,"utf-8");
  4. BufferedReader br=new BufferedReader(isr);



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

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

  1. //201521123108
  2. public void convertGBK2UTF8(String src, String dst)throws IOException
  3. {
  4. BufferedReader bf=new BufferedReader(src);
  5. OutputStream os=new FileOutputStream(dst);
  6. PrintWriter pw=new PrintWriter(os);
  7. String gbk=bf.readLine();
  8. while(gbk!=null)
  9. {
  10. String utf=new String(gbk,"UTF-8");
  11. pw.println(utf);
  12. }
  13. bf.close();
  14. pw.close();
  15. os.close();
  16. }

参考:InputStreamReaderTest.java与教学PPT

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

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

答:

  1. FileOutputStream fos = new FileOutputStream("student.txt");
  2. DataOutputStream dos = new DataOutputStream (fos);
  3. try
  4. {
  5. for(int i=0;i<3;i++)
  6. {
  7. dos.writeInt(students[i].getId());
  8. dos.writeInt(students[i].getAge());
  9. dos.writeDouble(students[i].getGrade());
  10. dos.writeUTF(students[i].getName());
  11. }
  12. }
  13. finally
  14. {
  15. dos.close();
  16. }
  17. FileInputStream fis = new FileInputStream("student.txt");
  18. DataInputStream dis = new DataInputStream(fis);
  19. try
  20. {
  21. for(int i=0;i<3;i++)
  22. {
  23. System.out.println(dis.readInt()+"|"+dis.readInt()+"|"+dis.readDouble()+"|"+dis.readUTF());
  24. }
  25. }
  26. finally
  27. {
  28. dis.close();
  29. }//201521123108

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

答:文件为76个字节。存储一个学生对象用24字节,所以文件大小=24*3+4=76字节,比题目1.1生成的文件大了。

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

答:

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

答:

  1. ObjectOutputStream out =new ObjectOutputStream(new FileOutputStream("student.txt"));
  2. out.writeObject(student);
  3. out.close();
  4. ObjectInputStream in =new ObjectInputStream(new FileInputStream("student.txt"));
  5. Student[] newStudent =(Student[]) in.readObject();
  6. in.close();
  7. for(Student e: newStudent)
  8. System.out.println(e);//201521123108

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

Q5. Scanner基本概念组装对象

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

  1. public static List<Student> readStudents(String fileName)
  2. {
  3. ArrayList<Student> stu=new ArrayList<Student>();
  4. BufferedReader bf=new BufferedReader(fileName);
  5. String str=bf.readLine();
  6. while(str!=null);
  7. {
  8. String[] mes=str.split(" ");
  9. int id=Integer.parseInt(mes[0]);
  10. int name=mes[1];
  11. int age=Integer.parseInt(mes[2]);
  12. double grade=Double.parseDouble(mes[3]);
  13. stu.add(new(id,name,age,grade));
  14. str=bf.readLine();
  15. }
  16. bf.close();
  17. return stu;
  18. }

7.1

  1. //201521123108
  2. public static void findFile(String path,String filename)
  3. {
  4. File file=new File(path);
  5. File[] files=file.listFiles();
  6. for(File f:files)
  7. {
  8. for(int i=0;i<files.length;i++)
  9. {
  10. if(f.isFile())
  11. {
  12. if(f.getName().equals(filename)) System.out.println(f.getAbsolutePath());
  13. }
  14. else if(f.isDirectory())findFile(f.getAbsolutePath(),filename);
  15. }
  16. }
  17. }

实验文件:Students.txt

参考:TextFileTest目录下TextFileTest.java

201521123108《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. 英文面试&笔试

    Topics:1.Talk about your carreer plan2.In ten years, what kind of people you will be? At that time,w ...

  2. XSS编码初析

    首先我们应当了解,当我们发送一个请求链接时,服务器与客户端都发生了什么 这里仅涉及到js的编码问题,因此就编码来说,首先我们确定我们发出的请求是采用GET的方式还是采用POST的方式 若采用GET的方 ...

  3. 4_SSRF

    SSRF SSRF(服务请求伪造)是一种由攻击者构造形成由服务器端发起请求的一个安全漏洞,它将一个可以发起网络请求的服务当作跳板来攻击其他服务器,SSRF的攻击目标一般是内网.当服务器提供了从其他服务 ...

  4. JAVA通过I/O流复制文件

    JAVA通过I/O流复制文件 本文是对字节流操作,可以多音频视频文件进行操作,亲测有效. 个人感觉这个东西就是靠记的, 没什么好解释的,,,, import java.io.File; import ...

  5. equals()和==的区别

    这个问题,总是记不住,那我就动手多写几遍,加强自己的记忆. 先给结论: 1)==.主要作用于基本数据类型的变量,比较的是二者的 "值"是否相等:如果作用于两个对象之间,则比较的是对 ...

  6. GridView用法详解

    前台页面: Default.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeFile=&qu ...

  7. C和C++混合编程之 extern “C”的使用

    C和C++混合编程之 extern "C"的使用 首先要明白: C++号称是C语言的超集,也确实,从语言的基本语法上,C++是包含所有C语言的语法的,而且C++为了兼容C,连C语言 ...

  8. wcf 上传文件报413,404和发布错误

    上传文件错误: 其实要修改所有的服务,不管是服务端还是客户端,Binding那边增加一个没有设置名字的默认配置就OK了:  <binding   closeTimeout="00:10 ...

  9. c# 读取excel数据的两种方法(转)

    转载自:http://developer.51cto.com/art/201302/380622.htm, 方法一:OleDb: 用这种方法读取Excel速度还是非常的快的,但这种方式读取数据的时候不 ...

  10. hdu 3062 2-Sat入门

    开始学习2-Sat,前面看了对称性解决2-sat的ppt,很有帮助. 题意:n对夫妻,夫妻需要出席一人,给出不相容的关系,求每对是否能完成出席方案. 思路:通过关系建图,Tarjan缩点,然后进行判断 ...