20190801~20190804总结

20190801 Day 17
内容回顾:
java专题 IO流 Input and Output Stream(输入输出流)

1、File对象,java中专门用来操作文件的一个对象
构造函数
File(String path);
File(String parent,String child);
File(File file,String child);
File(Uri url);
常见方法:
createNewFile()
delet()
exists()
isFile()
isDirectory()
getAbsolutePath()
getAbsoluteSpace()
getName()
getFreeSpace()
getUsableSpace()
getTotalSpance()
length()
mkdir()
mkdirs()
list()
listFiles()
2、IO流
IO的分类(包含的关系,相互掺杂的)
|–流的方向 输入流和输出流 所有的字节输入流都是以InputStream开头的
所有的字节输出流都是以OutputStream开头的
|–流的类型 字节流和字符流 字节流对应(InputStream、OutputStream)
字符流对应(Reader、Writer)
|–流的作用 节点流和过滤流(装饰流) Filter
过滤流(FilterInputStream、FilterOutStream、FilterReader、FilterWriter)
过滤流的已知直接子类:BufferedInputStream
(查看文档有很多) DataInputStream
DateOutputStream
转换流:转换字节和字符,准确的说是 将字节流转换成字符串(InputStreamReader、OutputStreamWriter)
使用字节输入流,读取了一个磁盘上的文件
|–1.创建对应的流
|–2.创建一个字节数组
|–3.定义一个int类型的长度
|–4.循环读取read(数组)
|–5.关闭流。要放在finally中(最重要)
使用字节流,读入读出数据
使用过滤流,读取数据
|–如果过滤流没有关闭,会导致数读不全
|–装饰者的设计模式

设计模式:所有设计模式的本质:解耦合

 编程中有个OCP原则(open closed principle):对于增加开放、对于修改关闭

课堂练习:把数字存储到磁盘上 123456 保存数据类型用out
读出数据类型用的是in 要站在内存的角度

	用数据流(过滤流(FilterxxxxStream)的子类)
	如果需要保存数据(数值)类型,建议使用数据流(DataOutputStream)完成

读入数据:
public static void main(String[] args) {
DataOutputStream dis = null;
try {
dis = new DataOutputStream(new FileOutputStream(“e:\a.dat”));
dis.writeInt(123456);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (dis != null) {
try {
dis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
读入、读出数据:
public static void main(String[] args) {

	DataOutputStream dos = null;
	DataInputStream dis = null;

	try {
		dos = new DataOutputStream(new FileOutputStream("d:/a.txt"));
		dos.writeInt(123);
		dos.writeInt(1234);
		dos.writeInt(12345);
		dos.writeInt(123456);	
		try {
			dis = new DataInputStream(new FileInputStream("d:/a.txt"));
			System.out.println(dis.readInt());
			System.out.println(dis.readInt());
			System.out.println(dis.readInt());
			System.out.println(dis.readInt());
		} catch (EOFException e) {
			System.out.println("数据输入完成");
		}
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	}	finally{
		if(dis != null){
			try {
				dis.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		if(dos != null){
			try {
				dos.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}	
}

}

下午:
字节流→在数据流动的过程中,数据是以字节的形式流动的
字符流→在数据传输过程中,数据以字符的形式流动(主要是文本的传输)
|–字符输入流:Reader类
|–字符输出流:Writer类

注意:
使用过滤流(包装流、缓冲流):
包装字节流时,建议使用BufferedInputStream、BufferedOutputStream
包装字符流时,建议字符输入流使用BufferedReader,建议字符输出流使用PrintWriter
字符流输入输出:
public void testCharStreamOutput02() {
BufferedReader br = null;
PrintWriter out = null;
try {
br = new BufferedReader(new FileReader(“E:\\workspace\\day16\\src\\com\\openlab\\io\\TestFile.java”));
// 节点流
out = new PrintWriter(“e:\test.java”);
String str = null;
while((str = br.readLine()) != null) {
out.println(str + “\n”); //不写的话 他出来的都是一行代码,这个写了就可以换行
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (out != null) {
out.close();
}
}
}
}

//标准流是字节流
//System.in 标准输入流
//System.out 标准输出流
转换流:
转换流的本质是字符流,主要功能就是将字节流转换成字符流

在Java中,多层直接使用break关键字无法退出
但是在开发中,我们有时需要退出多层循环,这个时候我们需要使用lable
public void testChangeStream01() throws Exception {
// 标准流是字节流
// System.in 标准输入流
// System.out 标准输出流
InputStream is = System.in;
// 转换流
InputStreamReader isr = new InputStreamReader(is);
label:while (true) {
System.out.println(“请输入您要输入的内容:”);
char[] buf = new char[1024];
int len = 0;
while((len = isr.read(buf))> -1) {
String str = new String(buf, 0, len);
if (str.trim().equals(“exit”)) {
// break;
// 直接退出程序
// System.exit(0);
// 使用label退出多层循环
break label;
}
String rstr = str.replace(“吗?”, “”);
System.out.println(rstr);
}
}
}


20190802 Day 18
内容回顾:
IO流
|–输入流 字节输入流都要实现InputStream抽象类、字符输入流都要实现Reader抽象类
|–输出流 …OutputStream抽象类,字符输出流都要实现Writer抽象类

|--字节流  InputStream OutputStream 为父类的
|--字符流  Reader Writer为父类的

|--节点流
|--过滤流 
    |--data流 数据流是过滤流
|--转换流  实现字节转换为字符流
|--对象流
    |--对象输入流(序列化 | 串行化),将我们java的对象存储在磁盘上
    |--对象输出流(反序列化),将存储在磁盘上的对象读取到内存中

demo:
1、将String存储到磁盘上

注意:在java中,对象默认是没办法序列化的,如果需要序列化对象必须实现一个接口Serializable的接口
注意:这个接口是空接口,是jdk1.1定义的
public interface Serializable{

如果你要序列化一个对象,必须实现Serializable

自定义类型的序列化和反序列化
必须要生成一个空接口serializable
然后生成序列号,再正常定义一个类

注意:如果java类的某些属性使用tranistan关键字修饰,则表示这些属于瞬时属性,这些属性无法参与序列化

考虑下:
用户管理系统,如果需要持戒化数据的管理系统?
如果我们需要持久化数据
只需要将user对象通过IO磁盘就可以了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值