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的一些简单 ...
随机推荐
- ORACLE索引监控的简单使用
--ORACLE索引监控的简单使用-------------------------2013/11/20 说明: 应用程序在开发时,可能会建立众多索引,但是这些索引的使用到底怎么样,是否有些索 ...
- umask的作用
--umask的作用---------------2013/11/15 umask的作用就是当用户创建一个文件时,设置默认的目录和文件权限. 创建非目录文件时,用666减umask值(目录文件用777 ...
- java代码_按要求输出相应沙漏
package Callatz;/* 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印******* ***** *** * ...
- 使用TensorFlow创建第变量定义和运行方式
import tensorflow as tf# 熟悉tensorflow的变量定义和运行方式v1 = tf.Variable(2) #定义变量并给变量赋值v2 = tf.Variable(48) c ...
- MySQL (九)
1 代码执行结构 代码执行结构有三种:顺序结构.分支结构和循环结构. 1.1 分支结构 分支结构:实现准备多个代码块,按照条件选择性执行某段代码. 在MySQL中只有if分支. 基本语法 if 条件判 ...
- Myeclipse详细使用教程
Myeclipse详细使用教程.. /*+Shift+Enter(生成多行注释) /**+Shift+Enter(生成文档注释)-----------------问题:在编辑jsp的时候,如果光标移动 ...
- 学问Chat UI(3)
前言 上文学问Chat UI(2)分析了消息适配器的实现; 本文主要学习下插件功能如何实现的.并以图片插件功能作为例子详细说明,分析从具体代码入手; 概要 分析策略说明 "+"功能 ...
- Java中的注释-快捷键
Eclipse中的快捷键 单行注释 Ctrl+/ 多行注释 Ctrl+Shift+/ 文档注释 Shift +Alt+j /** * @author Lenovo * 文档注释 * ...
- 知名渗透测试利器分享 - Appscan下载
安全测试应该是测试中非常重要的一部分,但他常常最容易被忽视掉. 尽管国内经常出现各种安全事件,但没有真正的引起人们的注意.不管是开发还是测试都不太关注产品的安全.当然,这也不能怪我们苦B的" ...
- 关于JDBC导入mysql的jar驱动的头痛
今天上午想写个小程序,需要调用数据库,查了书和各个博客. 最后卡在导入mysql驱动上了,花了1个多小时才让程序连上数据库. 这里有个小误区,你下载的是zip压缩文件,很多帖子写的都是让你导入驱动,但 ...