201521123025《java程序设计》第12周学习总结
1. 本周学习总结
2. 书面作业
将Student对象(属性:int id, String name,int age,double grade)写入文件student.data、从文件读出显示。
参考:本题具体要求见流与文件实验任务书-题目1-2.1
参考代码:TextFileTest.java
Q.1. 字符流与文本文件:使用 PrintWriter(写),BufferedReader(读)
1.1 生成的三个学生对象,使用PrintWriter的println方法写入student.txt,每行一个学生,学生的每个属性之间用|作为分隔。使用Scanner或者BufferedReader将student.txt的数据读出。(截图关键代码,出现学号)
//201521123025
import java.io.*;
import java.util.*;
class Student {
private int id;
private String name;
private int age;
private double grade;
public Student(){
}
public Student(int id, String name, int age, double grade) {
this.id = id;
this.setName(name);
this.setAge(age);
this.setGrade(grade);
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
if (name.length()>10){
throw new IllegalArgumentException("name's length should <=10 "+name.length());
}
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age<=0){
throw new IllegalArgumentException("age should >0 "+age);
}
this.age = age;
}
public double getGrade() {
return grade;
}
public void setGrade(double grade) {
if (grade<0 || grade >100){
throw new IllegalArgumentException("grade should be in [0,100] "+grade);
}
this.grade = grade;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age + ", grade=" + grade + "]";
}
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]);
}
}
public class Test{
public static void main(String[] args){
Student[] stu=new Student[3];
stu[0]=new Student(1,"张三",19,65);
stu[1]=new Student(2,"李四 ",19,75);
stu[2]=new Student(25,"林振斌",20,85);
try{
PrintWriter out=new PrintWriter("d:/student.txt");
Writedata(stu,out);
out.close();
Scanner in=new Scanner(new FileReader("d:/student.txt"));
Student[] newstu=readData(in);
in.close();
for (Student e : newstu)
System.out.println(e);
}catch (IOException exception)
{
exception.printStackTrace();
}
}
private static Student[] readData(Scanner in) {
int n = in.nextInt();
in.nextLine(); // consume newline
Student[] stus = new Student[n];
for (int i = 0; i < n; i++)
{
stus[i] = new Student();
stus[i].readData(in);
}
return stus;
}
private static void Writedata(Student[] stu, PrintWriter out)throws IOException {
out.println(stu.length);
for (Student e : stu)
e.writeData(out);
}
}
1.2 生成文件大小多少?分析该文件大小
id,age:每个数字占1byte
name:每个汉字占2byte
grade:每个grade占4字节
"|":每个占1byte
换行符:占2byte
1.3 如果调用PrintWriter的println方法,但在后面不close。文件大小是多少?为什么?
0字节,因为数据写到缓冲区上,原来有close()方法自动调用flush()来刷新,但是现在没有close()了,所以数据在缓冲区上直接丢失了。
2. 缓冲流
- 参考:本题具体要求见流与文件实验任务书-题目1-2.2到2.3
- 参考代码:BufferedReaderTest.java
- JUnit4常用注解
- JUnit4学习
2.1 使用PrintWriter往文件里写入1千万行(随便什么内容都行),然后对比使用BufferedReader与使用Scanner从该文件中读取数据的速度(只读取,不输出),使用哪种方法快?请详细分析原因?提示:可以使用junit4对比运行时间
用BufferedReader更快,因为使用缓冲区可以减少I/O次数,不用每次读写而是等缓冲区满了才进行一次读写。Scanner每次读写都要进行一次物理上的I/O操作,所以费时更多。
2.2 将PrintWriter换成BufferedWriter,观察写入文件的速度是否有提升。记录两者的运行时间。试分析原因。
使用BufferedWriter后有提升,因为BufferedWriter有使用缓冲。
3. 字符编码
- 参考:InputStreamReaderTest.java与教学PPT
3.1 现有EncodeTest.txt 文件,该文件使用UTF-8编码。使用FileReader与BufferedReader将EncodeTest.txt的文本读入并输出。是否有乱码?为什么会有乱码?如何解决?(截图关键代码,出现学号)
有乱码,因为FileReader并没有实现父类中带字符集参数的构造函数,只能按系统默认的字符集来解码。
- 修改:
3.2 编写一个方法convertGBK2UTF8(String src, String dst),可以将以GBK编码的源文件src转换成以UTF8编码的目的文件dst。
4. 字节流、二进制文件:DataInputStream, DataOutputStream、ObjectInputStream
- 参考:本题具体要求见流与文件实验任务书-题目1-1
4.1 参考DataStream目录相关代码,尝试将三个学生对象的数据写入文件,然后从文件读出并显示。(截图关键代码,出现学号)
4.2 生成的文件有多大?分析该文件大小?将该文件大小和题目1生成的文件对比是大了还是小了,为什么?\
72个字节。一个int=4Byte,一个double=8Byte,一个汉字=2Byte,标识符有两个字节。一个学生24个字节,一共三名学生,72字节。
将该文件大小和题目1生成的文件对比是大了。因为使用UTF-8编码存储文件.
4.3 使用wxMEdit的16进制模式(或者其他文本编辑器的16进制模式)打开student.data,分析数据在文件中是如何存储的。
行数 分析
000行 31=>1,7C=>分隔符,D5 C5 C8 FD=>张三,31 39=>19,36 35 2E 30=>65.0,0D 0A=>换行
010行 32=>2, 7C=>分隔符,C0 EE CB C4 20=>李四,31 39=>19,37 35 2E 30=>75.0,0D 0A=>换行
020行 33=>3, 7C=>分隔符,CD F5 CE E5=>王五,32 30=>20,38 35 2E 30=>85.0,0D 0A=>换行
4.4 使用ObjectInputStream(读), ObjectOutputStream(写)读写学生。(截图关键代码,出现学号) //参考ObjectStreamTest目录
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);
Q5. Scanner基本概念组装对象
实验文件:Students.txt
参考:TextFileTest目录下TextFileTest.java
编写public static List<Student> readStudents(String fileName)
从fileName指定的文本文件中读取所有学生,并将其放入到一个List中。应该使用那些IO相关的类?说说你的选择理由。
FileInputStream:从文件中读,BufferedInputStream:以缓冲方式从文件流中读,FileInputStream:因为要读UTF-8格式的文件
Q7. 文件操作
编写一个程序,可以根据指定目录和文件名,搜索该目录及子目录下的所有文件,如果没有找到指定文件名,则显示无匹配,否则将所有找到的文件名与文件夹名显示出来。
7.1 编写public static void findFile(String path,String filename)函数,以path指定的路径为根目录,在其目录与子目录下查找所有和filename相同的文件名,一旦找到就马上输出到控制台。(截图关键代码,出现学号)
public static void findFile(String path,String filename){
File pathName = new File(path);
String[] fileName = pathName.list();
for (String string : fileName) {
File file1= new File(pathName.getAbsolutePath(),string);
if (string.equals(filename)) {
System.out.println(f.getAbsolutePath());
}
if (file1.isDirectory()) {
findFile(file1.getAbsolutePath(),filename);
}
}
Q8. 正则表达式
参考:本题具体要求见流与文件实验任务书-题目3
8.1 如何判断一个给定的字符串是否是10进制数字格式?尝试编程进行验证。(截图关键代码,出现学号)
public static boolean isnum(string str){
String patternString="-?\\d+";
return Pattern.matches(patternString, str);
}
3. 码云及PTA
201521123025《java程序设计》第12周学习总结的更多相关文章
- 201521123025<java程序设计>第五周学习总结
1. 本周学习总结 2. 书面作业 1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误.并分析输出结果. 1.2 ...
- 201521123025<<java程序设计>>第4周学习总结
Q1. 本周学习总结 Q2.书面作业 1.注释的应用 使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看.(截图) 2.面向对象设计(大作业1,非常重要) 2.1 将在网上 ...
- 201521123025 <<java程序设计>>第3周学习总结
1. 本周学习总结 2. 书面作业 Q1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; ...
- 201521123025<<java程序设计>>第9周学习总结
1. 本周学习总结 2.书面作业 Q1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现什么异常.需要捕获吗(为什么)?应如何避免? 经常出现Array ...
- 2018面向对象程序设计(Java)第12周学习指导及要求
2018面向对象程序设计(Java)第12周学习指导及要求 (2018.11.15-2018.11.18) 学习目标 (1) 掌握Java GUI中框架创建及属性设置中常用类的API: (2) 掌 ...
- 面向对象程序设计(JAVA) 第12周学习指导及要求
2019面向对象程序设计(Java)第12周学习指导及要求 (2019.11.15-2019.11.18) 学习目标 (1) 掌握Vetor.Stack.Hashtable三个类的用途及常用API ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20175209 《Java程序设计》第九周学习总结
20175209 <Java程序设计>第九周学习总结 一.教材知识点总结 有关数据库下载中存在可能出现的问题已经在博客<数据库安装和使用过程中出现的一些问题>给出了相应的解决办 ...
- 20175221 2018-2019-2 《Java程序设计》第一周学习总结
20175221 2018-2019-2 <Java程序设计>第一周学习总结 教材学习内容总结 本周通过观看书本配套视频,学到了如解释器,编译器等一些简单概念. 还懂得了java的一些简单 ...
随机推荐
- mysql shutdown and kill
--mysqladmin shutdown If you execute mysqladmin shutdown when connecting to a local server using a U ...
- 解析SS、SP、BP寄存器
SS, SP, BP 三个寄存器 SS:存放栈的段地址: SP:堆栈寄存器SP(stack pointer)存放栈的偏移地址; BP: 基数指针寄存器BP(base pointer)是一个寄存器,它的 ...
- 初次搭建vue环境(最基础的)
一直以来觉得搭建环境是自己的短板,恰巧老大跟我说他刚才面试一个有4年工作经验的人,给那面试的人出了到机试题,给了1小时的时间连环境都没搭好.且不说那人的工作经验是否掺有水分,自己还是有点尴尬的,以前的 ...
- 第2天:HTML常用标签
今天学完主要对所学知识点进行了整理. 一.超链接ahref:www.baidu.com(跳转页面):id名(锚点跳到相应div位置):01.rar(压缩包) target:_blank(新窗口打开): ...
- RHCE认证过程
RHCE认证,即红帽认证工程师(Red Hat Certified Engineer)的简称,认证内容包括DNS.NFS.Samba.Sendmail.Postfix.Apache和关键安全功能的详细 ...
- 如何将Windows7系统中“运行”历史记录全部清除
如何将Windows7系统中“运行”历史记录全部清除.. 如何将Windows7系统中“运行”历史记录全部清除 1.任务栏空白处按下鼠标右键,在右键菜单栏中选择“属性”, 2.切换到“开始菜单”选项卡 ...
- python汉字输出编码问题
python中文输出乱码问题困扰了多少初学者,我在这方面栽了不知道多少跟头.现在我把我碰到的问题和解决的方法写出来与大家分享一下: 1输出乱码 所谓的乱码是指“鎴戞槸涓枃瀛楃涓”这样的内容.为什么 ...
- Linux入门练习
1.echo是用于终端打印的基本命令: 1.1echo默认将一个换行符追加到输出文本的尾部. 1.2 echo中转义换行符 如需使用转义序列,则采用echo -e "包含转义序列的字符串&q ...
- 写给后端的前端笔记:定位(position)
写给后端的前端笔记:定位(position) 既然都写了一篇浮动布局,干脆把定位(position)也写了,这样后端基本上能学会css布局了. 类别 我们所说的定位position主要有三类:固定定位 ...
- Java基础---String类和基本数据类型包装类
第一讲 String类 一.概述 String是字符串的类类型,用于描述字符串事物.字符串是一个特殊的对象.特殊之处就在于: Stings= new String();和Str ...