201521123088《Java程序设计》第12周学习总结

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

//201521123088
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 生成文件大小多少?分析该文件大小

生成文件大小为51字节。

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

  分析:第一行的“3”代表数组的大小,占3个字节;一个id占1个字节,共占3个字节;英文字符串每个字母占1个字节,故共占11个字节;age占2个字节,共6个字节;grade占4个字节,共占12个字节;分隔符有3个,共占3个字节;行末尾共占2个字节。

  • 参考:本题具体要求见流与文件实验任务书-题目1-2.1
  • 参考代码:TextFileTest.java


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

使用BufferedReader更快,因为BufferedReader是将数据先写到缓冲区,再写到硬盘,使用缓冲方式可以减少真正的底层I/O操作,效率就比Scanner更高。

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

有提升,因为BufferedWriter也同样是使用了缓冲方式,减少对底层的I/O操作,提高了效率。

  • 参考:本题具体要求见流与文件实验任务书-题目1-2.2到2.3
  • 参考代码:BufferedReaderTest.java
  • JUnit4常用注解
  • JUnit4学习


3. 字符编码
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。

  • 参考:InputStreamReaderTest.java与教学PPT


4. 字节流、二进制文件:DataInputStream, DataOutputStream、ObjectInputStream
4.1 参考DataStream目录相关代码,尝试将三个学生对象的数据写入文件,然后从文件读出并显示。(截图关键代码,出现学号)

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

相比第一题大了,因为使用UTF-8编码时,汉字所占字节会变大。

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

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

//201521123088
    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);
  • 参考:本题具体要求见流与文件实验任务书-题目1-1


5. Scanner基本概念组装对象
编写public static List

使用BufferedReader使文件读取更高效;因为要读取UTF-8编码的文件,所以使用InputStreamReader防止乱码;使用FileInputStream从文件中读取。

  • 实验文件:Students.txt
  • 参考:TextFileTest目录下TextFileTest.java


6. 选做:RandomAccessFile
6.1 使用RandomAccessFile实现题目1.1。(截图关键代码,出现学号)

6.2 分析文件大小**



7. 文件操作
编写一个程序,可以根据指定目录和文件名,搜索该目录及子目录下的所有文件,如果没有找到指定文件名,则显示无匹配,否则将所有找到的文件名与文件夹名显示出来。
7.1 编写public static void findFile(String path,String filename)函数,以path指定的路径为根目录,在其目录与子目录下查找所有和filename相同的文件名,一旦找到就马上输出到控制台。(截图关键代码,出现学号)

7.2 加分点:使用队列、使用图形界面、使用Java NIO.2完成(任选1)
7.3 选做:实现删掉指定目录及其子目录下的所有空文件夹。

  • 参考代码:FindDirectories.java
  • 参考:本题具体要求见流与文件实验任务书-题目2

7.4 选做:将指定目录及子目录下的所有.java文件,转化成UTF-8编码格式,并测试。

  • 参考资料:判断文件的编码格式


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

8.2 选做:修改HrefMatch.java,尝试匹配网页中的数字字符串、匹配网页中的图片字符串。

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

8.3 选做(较难):进一步改造上面的程序,获得图片的链接,如IMG src="images/mail1.gif",然后经过处理,生成该图片的实际链接地址http://cec.jmu.edu.com/images/mail1.gif。最后将生成的若干地址,放入一个队列。编写方法,可以依照该队列的所有图片地址,一次将图片下载下来。

  • 正则表达式参考文章

3. 码云及PTA

3.1. 码云代码提交记录

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

4.选做:课外阅读

4.1 尝试翻译Lesson: Basic I/O中的Summary
4.2 尝试完成Questions and Exercise
4.3 字符集与编码
4.4 Java正则表达式的语法与示例

时间: 2024-10-22 21:50:22

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

20145326蔡馨熠《Java程序设计》第一周学习总结

20145326蔡馨熠 <Java程序设计>第一周学习总结 教材学习内容总结 转眼间新的一学期终于开始了!为什么我这么期待呢?因为这学期可以上娄嘉鹏老师的java程序设计课,我不是什么电脑天才,之前c语言学得也不是特别好.可我就是对hdl和java特别感兴趣(之前在我的问卷调查报告里面提到过),并且寒假的时候在家里也预习了一部分java知识.第一周要求学习两个章节并作心得体会,虽然我早已看过前两章的知识,不过为了进一步巩固,我还是用了星期六一天的时间把第一章和第二章的知识从头到尾仔仔细细的看了

20155335 俞昆 2016-2017-2 《Java程序设计》第九周学习总结

学号 2016-2017-2 <Java程序设计>第九周学习总结 ##JDBC入门 在正式介绍JDBC前,已知JDBC是用来执行SQL的解决方案,开发人员使用JDBC的标准接口,开发人员不需接触底层数据库驱动程序的差异性. 本章,我们需要了解JDBC与API使用和概念,我们先要认识应用程序如何与数据库进行沟通,数据库本身是一种独立运行的应用程旭,程序员撰写的应用程序是利用通信协议对数据库进行指令交换,以进行数据的增加删除以及查找. 通常应用程序会利用一组专门与数据库进行通信协议的链接库,以简化

20145311 《Java程序设计》第九周学习总结

20145311 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 16.1JDBC 16.1.1JDBC简介 JDBC(Java DataBase Connectivity)是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行操作,开发人员无须接触底层数据库驱动程序的差异性. 厂商在操作JDBC驱动程序时,依方式可将驱动程序分为4种类型: ·Type 1:JDBC-ODBC Bridge Driver·Type 2:Native API

20172318 2016-2017-2 《Java程序设计》第一周学习总结

20172318 2016-2017-2 <Java程序设计>第一周学习总结 教材学习内容总结 在教材中基本明白了计算机系统的运行方式,了解了对于高级语言是使用是掌握好编程的关键,掌握了一些Java的基本命令,学会了会编译.运行.调试简单的Java程序 教材学习中的问题和解决过程 问题1:教程有很多专有词汇,有时候实际操作完全不会 问题1解决方案:问舍友和课代表解决大部分问题,剩下的靠百度 代码调试中的问题和解决过程 问题1:写了个小程序发现无法上传 问题1解决方案:没有用cd链接 问题2:使

20165208 2017-2018-2 《Java程序设计》第九周学习总结

20165208 2017-2018-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十三章 URL类 URL对象包含三部分信息:协议.地址和资源 创建URL对象两种方法: public URL (String spec) throws MalformedURLException public URL(String protocol,String host,String file) throws MalformedURLException 使用字符串初始化一个URL对象URL ur

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

20175314 <Java程序设计>第二周学习总结 教材学习内容总结 我在APPstore上发现了一个可以支持我们在IOS系统上学习实践Java程序的开发环境,只需要购买专业版就可以使用,能够让我们随时随地地编辑.编译和运行代码 第二章:基本数据类型与数组 数据类型转换时,格式为(类型名)要转换的值,级别低的变量赋给级别高的变量时,系统会自动完成类型转换.但是当级别高的变量要赋给级别低的变量,就必须要用到类型转换运算. 输入数据:使用Scanner创建一个对象,比如Scanner reade

20155336 2016-2017-2《JAVA程序设计》第二周学习总结

20155336 2016-2017-2 <JAVA 程序设计>第二周学习总结 教材学习内容 1: GIT版本检测 2: JAVA中基本类型 整数 字节 浮点数 字符 布尔(▲) 通过API可以得知各个类型可存储的数值范围 public class Range {public static void main(String[] args){ //byte.short.int.long的范围 System.out.printf("%d~%d%n", Byte.MIN_VALU

20145201 《Java程序设计》第一周学习总结

# 20145201 <Java程序设计>第一周学习总结 ## 教材学习内容总结 万事开头难,终于开始学习了Java.寒假的时候看到老师的要求确实有点慌,但是这周翻开书,从书本知识第一行学起,发现并不是自己想想中那么难,只要一步一个脚印,每周有自己的计划,并按照计划按部就班的完成,最后一定会拥有自己的小成果的. 1.1Java不只是语言 Java经过多年的版本更新后,最新的版本是Java SE8. 在java发展的过程中,它的应用领域越来越广,根据不同级别的应用开发区分了不同的应用版本,最终j

20145224-陈颢文 《Java程序设计》第一周学习总结

20145224 <Java程序设计>第一周学习总结 教材学习内容总结 通过第一周的学习让我对Java有了个初步的了解,知道了Java分为Java SE.Java EE.Java ME三大平台,其中Java SE是基础.Java的一大特点是它可以跨平台,而JVM对Java的跨平台提供了支持,它就类似于一个虚拟机,只要在当前平台安装了相应的JVM,Java程序就有了可以在此平台上运行的基础啦.JRE是Java的执行环境,在安装了JRE的计算机上就可以运行Java的程序了,当然光是可以跑代码对于程

20145326《Java程序设计》第二周学习总结

20145326<Java程序设计>第二周学习总结 教材学习内容总结 本周学习教材第三章,本章主要讲述了java语言中的一些基础语法,java是个支持面向对象的程序语言,但在正式进入面向对象支持语法的探讨前,对于类型.变量.运算符.流程控制等,这些各种程序语言都会有的基本语法元素,还是要有一定的基础.虽然各种程序语言都有这些基本语法元素,但千万别因此而轻忽它们,因为各种程序语言都有其诞生的宗旨与演化过程,对这些基本语法元素,也就会有其独有的特性. 1. 类型 在java的世界中,并非每个东西都