IO流
处理设备之间的数据传输
在本地电脑上,我们是站在内存角度 看流的流向
看电影 从硬盘中输入
写文件 从内存中输出
流 按照流向分 分为输入流和输出流
I InputStream 输入流
O outputStream 输出流
按照流读取文件的类型 我们分 字节流和字符流
字节流 读写任意类型文件 Stream
字符流 只能读取文本文件 Reader Writer
A、字节流
字节流继承体系 在java.io包下
字节流分 字节输入流InputStream和字节输出流OutputStream
1. 所有字节输入流父类 InputStream 抽象类
a.文件输入流FileInputStream
b. ByteArrayInputStream
c. ObjectInputStream
2. 所有字节输出流父类 OutputStream 抽象类
a.文件输出流FileOutputStream
b. ByteArrayOutputStream
c. ObjectOutputStream
1.文件输出流FileOutputStream
文件输出流是用于将数据写入 File
或 FileDescriptor
的输出流。文件是否可用或能否可以被创建取决于基础平台。特别是某些平台一次只允许一个 FileOutputStream
(或其他文件写入对象)打开文件进行写入。在这种情况下,如果所涉及的文件已经打开,则此类中的构造方法将失败。
FileOutputStream
用于写入诸如图像数据之类的原始字节的流。要写入字符流,请考虑使用 FileWriter
。
a.构造方法
1.
FileOutputStream(File file);
File file = new File("a.txt");输出流关联的文件,如果文件不存在,那么运行时系统会自动帮你创建
FileOutputStream out = new FileOutputStream(file);
2.
FileOutputStream(String name);
FileOutputStream out = new FileOutputStream("a.txt");
3.
FileOutputStream(String name,boolean);
FileOutputStream(File file,boolean);
true代表追加写入 每运行一次程序在原来基础上再写一次
false代表不追加
b.写出数据
通过文件输出流,向其所关联的文件中,写出数据
FileOutputStream out = new FileOutputStream("a.txt");
wirte();//参数类型 int b / byte[] b / byte[] b,int off,int len
out.write();//一次写入一个字节
out.write(97);//打开文件后看到a
out.write(300);//超过一个字节的范围,会丢弃多余字节
byte[] bytes = {
101,102,103,104};
out.write();//一次写入一个字节数组
out.write(bytes,2,2);//一次写入一个字节数组一部分,从2索引开始,写2个字节 结果 gh
String str = "杨家有女初长成";
byte[] bytes = str.getBytes();//将一个字符串转为字节数组
//UTF-8编码 一个汉字3个字节
out.write(bytes);
out.write("回眸一笑百媚生,六宫粉黛无颜色".getBytes());
out.write("\r\n".getBytes());//写入一个回车换行符
//每个平台系统的换行符都不一样
//windows平台 换行符 \r\n
//Linux \n
流用完之后必须释放资源,否则会有内存移除的风险
1.通知系统释放管理关联文件的资源
2.让IO流变成垃圾,等待垃圾回收器回收
out.close();//关闭流 释放资源
2.文件输入流FileInputStream
FileInputStream
从文件系统中的某个文件中获得输入字节。哪些文件可用取决于主机环境。
FileInputStream
用于读取诸如图像数据之类的原始字节流。要读取字符流,请考虑使用 FileReader
。
a.构造方法
FileInputStream(String name);
FileInputStream(File file);
File file = new File("e.txt");输入流所关联的文件如果不存在就会报错
FileInputStream in = new FileInputStream(file);//输入流所关联的文件如果不存在就会报错
FileInputStream in = new FileInputStream("a.txt");
b.读取文件中数据
read();//参数类型 byte b / byte[] b / byte[] b,int off,int len
FileInputStream in = new FileInputStream("a.txt");
//a.txt 内容 abcdef
int code = in.read();//一次读取一个字节 97
int code = in.read();//最后读不到时 返回-1
in.close();使用完后关闭释放资源
//创建一个空的字节数组充当缓冲区
byte[] bytes = new byte[1024];
int len = in.read(bytes);//将最多bytes长度个code数据存入bytes中 返回实际存入的code个数
//一次读取1024个字节,放到这个缓冲区中 len就是实际读取的长度 6
int len = in.read(bytes,0,3);//将最多3个数据存入bytes中,并将第一个数据存为bytes[0]
String str = new String(bytes,0,3);
in.close();
字符串转字节数组
byte[] bytes = "abc".getBytes();
字节数组转字符串
String str = new String(bytes);
3.文件复制
a.单字节读写
FileInputStream in = new FileInputStream("a.txt");
FileOutputStream out = new FileOutputStream(<