概述
IO流
1、什么是IO流
存储和读取数据的解决方案,像水流一样传输数据
2、IO流的作用
用于读取数据(本地文件 网络)
3、IO流按照流向可以分类哪两种流
输出流:程序->文件
输入流:文件->程序
4、IO流按照操作文件的类型可以分为哪两种流
字节流:可以操作所有类型的文件
字符流:只能操作纯文本文件
5、什么是纯文本文件
用windows系统自带的记事本打开并且能读懂的文件txt文件,md文件,xml文件,lrc文件等
IO流体系
FileOutPutStream
创建字节输出对象
- 如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的、如果文件存在,则会清空文件(替换)
写数据
- write方法的参数是整数,但是实际上写到本地文件中的整数在ASCll上对应的字符
释放资源
- .close
字节流
FileOutPutStream写数据的方式
换行写
win:\r\n、linux:\n、Mac:\r
续写:
如果想要续写,打开续写开关,开关在创建对象的额第二个参数 设为true
默认是关闭的 此时创建对象会清空文件
学习到新的try(){}catch写法
public class FileDemo6 {
public static void main(String[] args) throws IOException {
/* jdk1.7后的新写法 所谓的资源是指在程序完成后,必须关闭的流对象。写在()里面的流对象对应的类都实现了自动关闭接口AutoCloseable;*/
try(FileInputStream fileInputStream = new FileInputStream("D:\\Java TestFile\\aaa\\ccc\\test.txt");
FileOutputStream fileOutputStream = new FileOutputStream("D:\\Java Project\\java-foundation\\b.txt")) {
int len;
byte[] bytes = new byte[1024 * 1024 * 5];
while((len=fileInputStream.read(bytes))!=-1){
fileOutputStream.write(bytes,0,len);
}
} catch( IOException) {
System.out.println("IO流异常");
}
}
}
字符集
//编码
String str="da胖虎";
//默认utf-8
byte[] bytes = str.getBytes("GBK");
System.out.println(Arrays.toString(bytes));//[100, 97, -59, -42, -69, -94]
//解码
String s1 = new String(bytes,"ISO-8859-1");
String s2 = new String(bytes,"GBK");
String s3 = new String(bytes,"UTF-8");
System.out.println(s1);//daÅÖ»¢
System.out.println(s2);//da胖虎
System.out.println(s3);//da�ֻ�
字符流
- 字符流底层就是字节流
- 输入流:一次读一个字节,遇到中文时,一次读多个字节,
- 输出流:底层会把数据按照指定的编码方式进行编码,变成字节在写到文件中
- 使用场景:对于纯文本文件进行读写操作
字符流原理解析
缓冲区:调用read方法每次都往缓冲区中读取数据,目的为了更快捷拿到想要的数据
文件拷贝
用字节流
文件拷贝时 必须是从文件开始到文件结束,图中字节输出流的dest文件下还有子目录,同时必须把被拷贝的文件写入拷贝的文件目录下,即file.getName(); 就是要把被拷贝文件名字写到拷贝的文件下。
高级流
1.缓冲流
字节缓冲流
字节缓冲流提高效率的原理
字符缓冲流
种类
转换流
是字节流和字符流之间的桥梁
序列化流
可以把java中的对象写到本地文件中
打印流
1、只有输出流 只有写没有读
2、数据原样写出
3、自动刷新 自动换行 打印一次数据=写出+换行+刷新