1、IO流
IO:输入/输出(input/output)
流:抽象的概念,数据传输的总称
IO流:用来处理设备之间数据传输问题
input:读数据(硬盘->Java内存)
output:写数据(Java内存->硬盘)
2、IO流分类
1) 流向分类:输入输出
2)功能分类:节点流/处理流
(带Buffered的都是处理流)
3)数据类型:字节/字符
使用:记事本打开内存看得懂就字符,看不懂就字节,不知道使用什么流直接字节
(字节流是万能流)
3、IO使用步骤
1.创建对象
(1.调用系统创建空文件 2.创建字节输出流对象 3.让对象指向文件)
2.关闭资源(多个流可能同时打开一个文件,可能会出现问题)
3.调用方法
FileOutputStream fos = new FileOutputStream("路径");
fos.write(); / fis.read();
fos.close(); / fis.close();
写数据:FileOutputStream
OutputStream:是所有字节输出流的抽象父类
构造:
覆盖:FileOutputStream(String name)
//创建文件输出流以指定的名称写入文件
FileOutputStream(new File)
//创建文件输出流以写入由指定的 File对象表示的文件
追加:FileOutputStream(String name,boolean append)
//创建文件输出流以指定的名称写入文件
FileOutputStream(new File,boolean append)
//创建文件输出流以写入由指定的 File对象表示的文件
写入方法:write(int b) 将指定字节写入文件,一次写一个字节
write(byte[] b) 将指定的字节数组写入文件,一次写一个字节数组
write(byte[] b,int off,int len)
将指定的字节数组,从偏移量off开始写入文件,一次写len个字节,一次写数组的一部分
换行符:不同的操作系统中有不同的换行符
windous: \r\n
linux: \n
mac: \r
常用: \n
读数据:FileInputStream
InputStream:所有字节输入流的抽象父类
构造:FileInputStream(String name)
创建文件输入流以指定的名称读取文件数据
注意:不能创建文件只能做查找
读取数据方法:read():一次读取一个字节,返回值为十进制
read(byte[] b):一次读取一个字节数组,返回值为读取数据的个数
read(byte[] b,int off,int len) :
使用当前数组的一部分读取数据,返回值为读取数据个数
注意: read(byte[] b,int off,int len)不循环读取数据
循环读取数据的写法:
int i;
while((i=fis.read(数据))!=-1) {
System.out println(输出数据);
}
System.out println(Arrays.toString(b));
//[0.0.97.98.0] 返回指定数组内容以字符串形式表示
System.out println(new String(b,off:2,len:2));
//fgh 字节数组byte转字符串string
注意:一次read获取一次数据,所以每次循环只能获取一次数据