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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现