2022.5.5 I/O 字节流

字节流

字节流的父类(抽象类)

复制代码
 1  //InputStream 字节输入流,此抽象类是表示字节输入流的所有类的超类。
 2  3  public int read(){}//  从输入流读取数据的下一个字节。 
 4  public int read(byte[] b){}//从输入流读取一些字节数,并将它们存储到缓冲区 b 。
 5  public int read(byte[] b, int off, int len){}//从输入流读取最多 len字节的数据到一个字节数组。 
 6  7  // OutputStream 字节输出流,这个抽象类是表示字节输出流的所有类的超类。 输出流接收输出字节并将其发送到某个接收器。
 8  public void write(int n){}//将指定的字节写入此输出流。 
 9  public void write(byte[] b){}//将 b.length字节从指定的字节数组写入此输出流。 
10  public void write(byte[] b, int off, int len){}//从指定的字节数组写入 len个字节,从偏移 off开始输出到此输出流。 
复制代码

文件字节流

InputStream 的子类:FileInputStream:从文件系统中的某个文件中获得输入字节。哪些文件可用取决于主机环境。

1 public int read(byte[] b)//从流中读取多个字节,将读到内容存入b数组,返回实际读到的字节数;如果达到文件的尾部,则返回-1。

文件输入流

复制代码
 1 package com.xing;
 2  3  import java.io.FileInputStream;
 4  import java.io.FileNotFoundException;
 5  import java.io.IOException;
 6  7  public class Demo01 {
 8      public static void main(String[] args) throws IOException {
 9          //抛出异常FileNotFoundException  文件可能没有      文件路径
10          FileInputStream fis = new FileInputStream("d:\\aaa.txt");
11 12          //单字节读取fis.read();读取d:\\aaa.txt文件   抛出异常
13          int data = 0;
14          while ((data = fis.read()) != -1) {//读取的数据显示ascll编码,知道读到空返回-1  做强转
15              System.out.print((char)data);//abcdef
16 17          }
18          //关闭
19          fis.close();
20 21      }
22  }
23
复制代码

一次读取多个字节 读到数组中

复制代码
 1  package com.xing;
 2  3  import java.io.FileInputStream;
 4  import java.io.FileNotFoundException;
 5  import java.io.IOException;
 6  7  public class Demo01 {
 8      public static void main(String[] args) throws IOException {
 9          //抛出异常FileNotFoundException  文件可能没有      文件路径
10          FileInputStream fis = new FileInputStream("d:\\aaa.txt");
11          
12            //一次读取多个字节  读到数组中
13  //        byte[] bytes = new byte[3];
14  //        int count = fis.read(bytes);//返回读取的字节数,将读取的字节返回到bytes数组
15  //        System.out.println(count);//3
16  //        System.out.print(new String(bytes));//abc
17  //        System.out.println();
18  //
19  //        int count2 = fis.read(bytes);
20  //        System.out.println(count2);//3
21  //        System.out.println(new String(bytes));//def
22  //
23  //        int count3 = fis.read(bytes);
24  //        System.out.println(count3);//1  新读取一个
25  //        System.out.println(new String(bytes));//gef   读取的g覆盖数组的元素
26 27          //与上面一样
28          byte[] bytes = new byte[3];
29          int count = 0;
30          while ((count = fis.read(bytes)) != -1) {
31              System.out.println(new String(bytes,0,count));
32          }
33 34          //关闭
35          fis.close();
36 37      }
38  }
39
复制代码

OutputStream子类:FileOutputStream

1  public void write(byte[] b)//一次写多个字节,将b数组中所有字节,写入输出流。

文件输出流

复制代码
 1 package com.xing;
 2  3  import java.io.FileNotFoundException;
 4  import java.io.FileOutputStream;
 5  import java.io.IOException;
 6  7  public class Demo02 {
 8      public static void main(String[] args) throws IOException {
 9          //抛出异常  没有bbb.txt会自动创建一个用于接收传入的字符   每次运行都会覆盖之前写入的
10          FileOutputStream fos = new FileOutputStream("d:\\bbb.txt");
11          //写入文件
12          fos.write(97);//写入a到bbb.txt
13          fos.write('b');//写入b到bbb.txt
14 15          String s = "HelloWorld";
16          byte[] b = s.getBytes();//s.getBytes()将字符串s转换为字符数组
17          fos.write(b);//将数组b的内容写入bbb.txt
18 19          //关闭
20          fos.close();
21 22      }
23  }
24
复制代码

复制代码
 1 package com.xing;
 2  3  import java.io.FileNotFoundException;
 4  import java.io.FileOutputStream;
 5  import java.io.IOException;
 6  7  public class Demo02 {
 8      public static void main(String[] args) throws IOException {
 9          //抛出异常  没有bbb.txt会自动创建一个用于接收传入的字符   每次运行都会之前写入的基础上进行追加
10          FileOutputStream fos = new FileOutputStream("d:\\bbb.txt",true);
11          //写入文件
12          fos.write(97);//写入a到bbb.txt
13          fos.write('b');//写入b到bbb.txt
14 15          String s = "HelloWorld";
16          byte[] b = s.getBytes();//s.getBytes()将字符串s转换为字符数组
17          fos.write(b);
18 19          //关闭
20          fos.close();
21 22      }
23  }
复制代码

运行一次追加一次

图片复制案例

 
复制代码
 1 package com.xing;
 2  3  import java.io.FileInputStream;
 4  import java.io.FileNotFoundException;
 5  import java.io.FileOutputStream;
 6  import java.io.IOException;
 7  8  //实现文件复制:先将数据从磁盘读到内存,在将其从内存写到磁盘
 9  public class Demo03 {
10      public static void main(String[] args) throws IOException {
11          //创建文件字节输入流 将磁盘文件读入内存
12          FileInputStream fis = new FileInputStream("d:\\copy_before.jpg");
13 14          //将文件写入磁盘
15          FileOutputStream fos = new FileOutputStream("d:\\copy_after.jpg");
16 17          //一边读,一边写
18          byte[] b = new byte[1024];
19          int count = 0;//读取的字节数
20          while ((count = fis.read(b)) != -1) {
21              fos.write(b,0,count);
22          }
23 24          //关闭
25          fis.close();
26          fos.close();
27      }
28  }
29
复制代码

posted @   暴躁C语言  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示