[Java基础一]Java IO:字节流、字符流、缓冲流

路径

根目录:

打开目录文件夹的第一层就是根目录。
eg:
我的项目online-examination-system
我的项目
点击进入项目如图,该目录就是根目录,也就是说下图的所有文件夹|文件在根目录下。
在这里插入图片描述

绝对路径

从盘符开始,直接到达目标位置。

eg:    D:\Code\JavaWeb\online-examination-system
注意:绝对路径用的分隔符为“ \ ”,相对路径用的分割符为“ / ”。

相对路径:

以引用文件所在的位置为参考基础,而建立出的目录路径;(html文件引用图像为例)

1.同一级路径:图像文件位于HTML文件同一级,直接写图像名;

< img  src="photo.jpg" />

2.下一级路径:图像文件位于HTML文件下一级,用符号 / (下一级,多个下级就用多个符号)

< img  src="aaa/photo.jpg" />

3.上一级路径:图像文件位于HTML文件上一级,用符号 …/ (上一级,多个上级就用多个符号)

< img  src="../photo.jpg" />

网络中的路径:

联网情况下,可以调用任意网站的图片,要写上网站的绝对路径。

java程序中调用的路径:

访问Windows的路径:

String path="D:\\Code\\JavaWeb\\online-examination-system\\myfile.xlsx";

访问Linux的路径:

String path="//home//sdnmuser//app//microservice//myfile.xlsx";

SpringBoot中yml文件配置的路径:

访问Windows的路径:

import:
	filePath:  D:\Code\JavaWeb\online-examination-system\myfile.xlsx

访问Linux的路径:

import:
	filePath:  /home/sdnmuser/app/microservice/myfile.xlsx

File类

文件和目录路径名的抽象表示形式;
Java把电脑中的文件和文件夹(目录)封装为一个File类,可以使用File类对文件和文件夹进行操作;
注意:File类只能对文件或文件夹外部进行操作,不能对文件内部内容进行操作。
构造方法:

new File(String pathname)
new File(String parent,String child)
new File(File parent,String child);

路径可以以文件、文件夹、相对和绝对路径结尾;不考虑路径的真假;
方法:

1. String pathAbsolutePath() 返回此File的绝对路径名称;
2. String getPath() 将此File转换为路径名;
3. String getName() 返回File表示的文件或目录的名称;
4. long length() 返回此Filr表示的文件的长度; (文件夹没有大小概念)
5. boolean exists()File表示的文件或目录是否存在;
6. boolean isDirectory()File表示的是否为目录;
7. boolean isFile()File表示的是否为文件;
8. boolean createNewFile() 创建一个不存在的空文件;
9. boolean mkdir() 创建在此File表示的目录;
10. boolean mkdirs() 创建创建在此File表示的目录,多个;
11. boolean delete() 删除由此File表示的文件或目录;
12. String[] list()File目录中的所有子文件或目录;
13. File[] listFiles()File目录中的所有子文件或目录;

file:文件

directory:文件夹/目录
path:路径

静态字段:

String pathSeparator 与系统有关的路径分隔符
char pathSeparatorChar
String separator 与系统有关的默认名称分隔符
char separatorChar
注意:工作上对路径的操作时,路径不能写死;
一切文件数据在存储时,都是以二进制数字的形式保存以字节流可以传输任意文件数据;

OutputStream类

抽象类表示输出字节流的所有类的超类;
方法:

1.close() 关闭此输出流并释放此流相关联的任何系统资源;
2.flush() 刷新此输出流并强制任何缓冲的输出字节被写出;
3.write(byte[] b) 将b.length字节从指定的字节数组写入此输出流;
4.write(byte[] b,int off,int len) 从指定的字节数组写入len字节,从偏移量off开始输出到此输出流;
5.write(int b) 将指定的字节写入输出流;

FileOutputStream类 extends OutputStream类

文件字节输出流,把内存中的数据写入到硬盘的文件中。
构造方法:

1.FileOutputStream(String name)
2.FileOutputStream(String name, boolean append) 创建一个向具有指定 name 的文件中写入数据的输出文件流
3.FileOutputStream(File file, boolean append) 
4.FileOutputStream(File file)  创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
append的作用:追加开关(true为开)。

构造方法的作用:

1.创建一个FileOutputStream对象;
2.会根据构造方法传递的文件/文件路径,创建一个空的文件;
3.会把FileOutputStream对象指向创建好的对象;

流程:

Java程序-->JVM-->OS(操作系统)-->OS调用写数据的方法-->把数据写入到文件。

使用步骤:

1.创建一个FileOutputStream对象,构造方法中传递写入数据的目的地;
2.调用FileOutputStream对象中的write方法,将数据写入到文件中;
3.关闭资源;

输入内容:

换行:
windows: \r\n
Linux: /n
mac: /r

BufferedOutputStream类 extends OutputStream

字节缓冲输出流,继承字节输出流,构造方法传递FileOutputStream,缓冲流会给F…添加一个缓冲区,提高写入效率;
构造方法:

1.BufferedOutputStream(OutputStream out) 创建一个新的缓冲流对象,将数据写入指定的底层输出流;
2.BufferedOutputStream(OutputStream out,int size) 指定缓冲区大小;

InputStream类

字节输入流,抽象类表示字节输入流的所有类的超类。
方法:

1.close() 关闭此输入流并释放此流相关联的任何系统资源;
2.int read() 从输入流中读取数据的下一个字节;
3.int read(byte[] b) 从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中;

参数byte[]的作用:

1.缓存作用,存储每次读取的多个字节;
2.数组返回的长度定义为1024或倍数;
3.int返回值表示每次读到的有效字节数;

FileInputStream类 extends InputStream类

把硬盘文件中的数据读取到内存中使用。

构造方法:
	1.FileInputStream(String name)
	2.FileInputStream(File file)
参数:读取文件的数据源;
构造方法的作用:
	1.创建一个FileInputStream对象;
	2.FileInputStream对象指定构造方法传递文件中读取文件;
使用步骤:
	1.创建一个FileInputStream对象,构造方法中绑定要读取的数据源;
	2.调用FileInputStream对象中的read方法,读取文件;(处理读取到的值)
	3.关闭资源;

BufferedInputStream类 extends InputStream

字节缓冲输入流,继承字节输入流,构造方法传递FileInputStream,缓冲流会给F…添加一个缓冲区,提高写入效率;
构造方法:

1.BufferedInputStream(InputStream out) 创建一个新的缓冲流对象;
2.BufferedInputStream(InputStream out,int size) 指定缓冲区大小;

Reader类

字符输入流,是字符输入流的最顶层父类。
方法:

1.int read() 读取单个字符并返回;
2.int read(char[] cbuf) 一次读取多个字符,将字符写进数组里;
3.close() 关闭流并释放与之关联的所有资源;

FileReader类 extends InputStreamReader extends Reader类

文件字符输入流,把硬盘中的数据一字符的形式读到内存。

构造方法:
	FileReader(String fileName)
	FileReader(File file)
构造方法的作用:
	1.创建一个FileReader对象;
	2.将对向指向要读取的文件;

InputStreamReader类 extends Reader (拥有父类方法)

是字节流通向字符流的桥梁,可以指定charset读取字节并将其解码为字符(解码)
构造方法:

1.InputStreamReader(InputStream in) 创建使用默认字符编码的OutputStreamReader2.InputStreamReader(InputStream in,String charsetName) 创建使用指定字符集的InputStreamReader

BufferedReader类 extnds Reader

字符缓冲输入流,继承字符输入流,构造方法传递FileReader,缓冲流会给F…添加一个缓冲区,提高写入效率;
构造方法:

1.BufferedReader(Reader r);
2.BufferedReader(Reader r,int size);

特有方法:

void readLine() 读取一个文本行;

读取一个文本行,读取一行数据,包含该行内容的字符串,不包含任何行终止符。

Writer类

字符输出流,所有字符输出流的最顶级的父类。
方法:

1.write(int c) 写入一个字符;
2.write(char[] cduf) 写入字符数组;
3.write(char[] cduf,int off,int len) 写入字符数组的一部分;
4.write(String str) 写入字符串;
5.write(String str,int off,int len) 写入字符串的一部分;
6.flush() 刷新该流的缓冲;
7.close() 关闭资源;

输入内容:

换行:
	windows: \r\n
	Linux: /n
	mac: /r

FileWriter类 extends OutputStreamWriter extends Writer

文件字符输出流,把内存中字符数据写入到文件中。

处理异常:

1.try{}catch{}finally{}
2.try(定义流对象;定义流对象....){
	可能产生异常的代码
}catch{
	异常的处理逻辑
}

BufferedWriter类 extnds Writer

字符缓冲输出流,继承字符输出流,构造方法传递FileWritee,缓冲流会给F…添加一个缓冲区,提高写入效率;
构造方法:

1.BufferedWriter(Writer w);
2.BufferedWriter(Writer w,int size);

特有方法:

void newLine() 写入一个行分隔符;

OutputStreamWriter类 extends Writer (拥有父类方法)

是字符流通向字节流的桥梁,可以指定charset将要写入流中的字符编码成字节(编码:把看得懂的变为看不懂)。
构造方法:

1.OutputStreamWriter(OutputStream out) 创建使用默认字符编码的OutputStreamWriter2.OutputStreamWriter(OutputStream out,String charsetName) 创建使用指定字符集的OutputStreamWriter

Properties<>集合 extends Hashtable<k,v> implements Map<k,v>

表示了一个持久层的属性集,可以保存在流中或从流中加载。
Properties集合是唯一和IO流相结合的集合;

使用store方法,把集合中的临时数据持久化写入到硬盘中存储;
使用load方法,把硬盘中保存的数据文件(键值对)读取到集合中使用;

属性列表中每个键及其对应的值都是字符串类型;
方法:

1.Object setProperty(String key,String value) 调用Hashtable的方法put;
2.String getProperty(String key) 通过key找到value值;
3.Set<String> stringPropertyNames() 返回此属性列表中的键集,相当于Map中的keySet方法;
4.store(OutputStream out,String comments)
5.store(Writer writer,String comments)
	参数:
		OutputStream :字节输出流,不能写入中文;
		Writer:字符输入流,可以写中文;
		comments:注释,不能使用中文,一般使用空字符串;
6.load(InputStream inStream) 
7.load(Reader reader) 

注意:

1.存储键值对的文件,键与值默认的连接符号可以使用=,空格;
2.用#注释;
3.默认String,不用加引号;

ObjectOutputStream类 extends OutputStream

对象的序列化流,把对象以流的方法写入到文件中保存。
构造方法:

	ObjectOutputStream(OutputStream out) 创建写入指定OutputStreamObjectOutputStream;
特有方法:
	void writeObject(Object obj) 将指定的对象写入到 ObjectOutputStream

使用步骤:

1.创建ObjectOutputStream对象,方法中传递字节输出流;
2.使用ObjectOutputStream对象的方法writeObject,把对象写入到文件中;
3.释放资源;

要实例化的对象:
序列化和反序列化的时候,会抛出NotSeralizableException没有序列化异常;
类通过实现io.Serializable 接口以启动其序列化功能;

Serializable接口也叫标记接口,实现该接口后,会给该类添加一个标记;
static关键字和transient关键字:
static:静态关键字,优先于非静态加载到内存中,被static修饰的成员变量不能被序列化;
transient:瞬态关键字,被transient修饰的成员变量不能被序列化;
自定义序列标记号:
private static final login serialVersionUID = 1L;
防止在序列化后,类的class文件发生改变,在反序列化时产生异常InvalidClassException异常;

ObjectInputStream类 extends InputStream

对象的反序列化,把文件中保存到对象,以流的方式读取出来;
构造方法:

ObjectInputStream(InputStream in) 创建指定InputStreamObjectInputStream

特有方法:

void readObject(Object obj)ObjectinputStream中读取对象;
反序列化的前提:
	1.类必须实现Serializable接口
	2.必须存在类对应的class文件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值