输出是内存往磁盘(硬盘)输出(内到外) — 记: 输入至内存 输出至硬盘

输入是磁盘(硬盘)往内存输入字节

image.png
image.png
image.png
不支持写字符串,只支持写字节数组:
image.png
image.png

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