二.字节流
1.概念
一切皆为字节(文本,图片,视频等)
使用字节流读取中文:
一个中文:
GBK:占两个字节
UTF-8:占三个字节
2.字节输出流OutputStream(超类)
1)概念:
java.io.OutputStream :字节输出流
抽象类,输出字节流的所有类的超类
2)子类共性的方法:
void close();关闭此输出流并释放与此流相关联的任何系统资源。
void flush();刷新此输出流并强制任何缓冲的输出字节被写出。
void write(byte[] b);将 b.length字节从指定的字节数组写入此输出流。
void write(byte[] b, int off, int len);从指定的字节数组写入 len个字节,从偏移 off开始输出到此输出流。
abstract void write(int b)将指定的字节写入此输出流;
2.1 FileOutputStream(子类,实现类)
1)概念:
java.io.FileOutputStream extends OutputStream
FileOutputStream:文件字节输出流
作用:把内存中的数据写入硬盘中
2)构造方法:
FileOutputStream(String name);创建文件输出流,写入指定名称的文件。
FileOutputStream(File file);创建文件输出流,写入指定File对象表示的文件.
参数:
String name:一个文件的路径
File file:一个文件(File对象)
构造方法的作用:
1.创建一个FileOutputStream对象
2.根据构造方法中传递的文件/文件路径,创建一个空的文件
3.会把FileOutputStream对象指向创建好的文件
3)写入数据的原理(内存->硬盘):
java程序-->JVM-->OS(操作系统)-->OS调用写数据的方法-->数据写入到文件
4)字节输出流的使用步骤:
1.创建一个FileOutputStream对象,构造方法中传递写入数据的目的地
2.调用FileOutputSteam对象中的方法write,把数据写入到文件中
3.释放资源(流会占用一定内存,使用完要释放流)
5)将字符转换成字节:
String str="学习使我快乐";//GBK两个字节一个中文,UTF-8三个字节一个中文
byte[] bytes1 = str.getBytes();//使用getBytes()方法
6)代码实现:
//1.创建一个FileOutputStream对象,构造方法中传递写入数据的目的地
FileOutputStream fos = new FileOutputStream("G:\\a.txt");
//2.调用FileOutputSteam对象中的方法write,把数据写入到文件中
fos.write(97);//写入一个字节
byte[] bytes ={65,66,67,68,69};//ABCDE
fos.write(bytes);//写入一个字节数组
fos.write(bytes,0,3);//写入字节数组的一部分(开始0,长度3)
fos.flush();//刷新
//3.释放资源(流会占用一定内存,使用完要释放流)
fos.close();
7)字节输出流的续写和换行
FileOutputStream(File file, boolean append)创建文件输出流,写入由指定的 File对象表示的文件。
FileOutputStream(String name, boolean append)创建文件输出流,以指定的名称写入文件。
参数:
String name,File file:写入数据的目的地
boolean append:追加写开关,
ture:创建对象不会覆盖原文件,在文件内容末尾追加数据
false:创建新文件,覆盖原文件
写换行:
windows:\r\n
linux:/n
mac:/r
1)概念:
java.io.InputStream 字节输入流
抽象类表示字节输入流的所有类的超类
2)子类共性方法:
abstract int read() ;从输入流读取数据的下一个字节。
int read(byte[] b); 从输入流读取一些字节数,并将它们存储到缓冲区 b中 。
int read(byte[] b, int off, int len); 从输入流读取最多 len字节的数据到一个字节数组。
void close() ;关闭此输入流并释放与流相关联的任何系统资源。
1)概念:
java.io.FileInputStream extend InputStream 文件字节输入流
作用:把硬盘文件中的数据,读取到内存中
2)构造方法
FileInputStream(String name)
FileInputStream(File file)
参数:读取文件的数据源
String name:文件路径
File file:文件
构造方法作用:
1.会创建一个FileInputStream对象
2.会把FileInputStream对象指定构造方法中药读取的文件
3)读取数据的原理(硬盘-->内存):
java程序-->JVM-->OS操作系统-->OS读取数据的方法-->读取文件
4)字节输入流的使用步骤:
1.创建FileInputStream对象,构造方法中绑定要读取的数据源
2.使用FileInputStream对象中的方法read,读取文件
3.释放资源close
5)将字节数组转换为字符串
String类的构造方法:
String(byte[] bytes):把字节数组转换为字符串
String(byte[] bytes, int offset, int length):将字节数组的一部分转换为字符串,offset开始索引,length长度
6)代码实现:
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("G:\\a.txt");//a.txt:ABC
// System.out.println("---循环读取一个字节---");
// int len1 = 0;//记录读取到的字节
// while ((len1 = fis.read()) != -1) {//fis.read():读取一个字节,判断下一个字节是否存在,不存在就等于-1结束循环
// System.out.println(len1);//65 66 67
// }
System.out.println("---一次读取多个字节---");
byte[] bytes = new byte[1024];//存储读取到的多个字节
int len2 = 0;//记录每次读取的有效字节个数
while ((len2 = fis.read(bytes)) != -1) {//一次读取一个数组长度的字节
System.out.println(new String(bytes, 0, len2));//转换为字符串输出
}
fis.close();
}