输出是内存往磁盘(硬盘)输出(内到外) — 记: 输入至内存 输出至硬盘
输入是磁盘(硬盘)往内存输入字节
不支持写字符串,只支持写字节数组:
package com.itheima.d4_byte_stream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class OutputStreamDemo04 {
public static void main(String[] args) throws Exception {
// 1. 创建一个文件字节输出流管道与目标文件接通 (输出值硬盘(磁盘))
// 以后不用先创建文件,直接先写路径,然后会自动创建
// 这个管道是个资源,内存和磁盘文件是耦合的 (输出流:从内存输出到硬盘磁盘)
// OutputStream os = new FileOutputStream("file-io-app/src/out04.txt"); // 先清空之前的数据,写新数据进入
// 这样是可以追加管道, 不会清空之前的数据
OutputStream os = new FileOutputStream("file-io-app/src/out04.txt",true); //
// 2.写数据出去
// a. public void write(int a): 写一个字节出去
os.write('a');
os.write(98); // 数字一个字节没毛病 一个数字有对应的ASCII码字节值
// 换行 ”\r\n“ 在Linux和Windows都能识别是换行 然后要用getBytes方法
// 因为write输出流 只支持 字节类型
os.write("\r\n".getBytes()); // getBytes方法获取当前方法的字节
// 所有os.write方法不能写中文 会乱码 可以写一个桶出去(字符数组装起来)
// os.write('徐'); // 徐这个字符占3个(在utf-8中) 默认只会写一个字节
// b.public void write(byte[] buffer): 写一个字节数组出去
byte[] buffer = {'a' , 97, 98, 99};
os.write(buffer); // 该write方法可以传数组
os.write("\r\n".getBytes()); // 换行
byte[] buffer2 = "我是中国人".getBytes(); // getBytes方法可以将字符转换成对应的字节 这里是15个字节
// byte[] buffer2 = "我是中国人".getBytes("GBK"); 会乱码
os.write(buffer2);
os.write("\r\n".getBytes()); // 换行
// c. public void write(byte[] buffer , int pos , int len):写一个字节数组的一部分出去
byte[] buffer3 = {'a', 97, 98, 99};
// 写进去时:a a b(输出的) 写进去时会将字节数字转换成对应的字符
os.write(buffer3, 0, 3); // 将 索引为3之前的元素写进去
os.write("\r\n".getBytes()); // 换行
// 写数据必须刷新数据 要不然可能会丢数据(因为数据是缓存在内存中,一定要刷新,要不然数据可能还在缓冲区,还没有写到文件中去
// os.flush(); // 写数据必须刷新数据 可以继续使用流
os.close(); // 释放资源 包含了刷新的! 关闭后流不可以使用
}
}