java IO流
当不同的介质之间有数据交互的时候 JAVA就使用流来实现 数据源可以是文件 还可以是数据库 网络甚至是其他的程序 比如 站在程序的角度来看就叫做输入流 反之就是输出流
# ## IO流的分类
根据按照流向可分为:输入流(读取文件的数据到程序中 读取数据)和输出流(读取程序的数据写出到文件中 写出数据)
根据按照数据类型可分为:字节流(传输数据的最基本单位是字节的流)和字符流(传输过程中 传输数据的最基本单位是字符的流)
字节流可分为:字节输入流(读取数据 InputStream)和字节输出流(写出数据 OutputStream) 以Stream结尾大多数是字节流
字符流可分为:字符输入流(读取数据 Reader)和字符输出流(写出数据 Writer)
# ## InputStream
InputStream 是所有的输入字节流的父类 它是一个抽象类 其子类包括 ByteArrayInputStream StringBufferInputStream FileInputStream 分别从Byte 数组 StringBuffer 和本地文件中读取数据 PipedInputStream是从与其它线程共用的管道中读取数据
字节流读取数据方式有两种
int read() 一次读取一个字节
@Test public void readDate() throws IOException { FileInputStream fis = new FileInputStream("FileOutputStreamDemo.java"); // //通过测试 读取的数据是-1 说明已经读取到文件的末尾了 int by = 0; // 读取,赋值,判断 while ((by = fis.read()) != -1) { System.out.print((char) by); } // 释放资源 fis.close(); }
使用流的时候一定要最后close() 有两个原因 1.让流对象变成垃圾 这样就可以被垃圾回收器回收了 2.通知系统去释放跟该文件相关的资源
int read(byte[] b) 一次读取一个字节数组
@Test public void readDate2() throws IOException { FileInputStream fis = new FileInputStream("FileOutputStreamDemo.java"); byte[] bys = new byte[1024]; int len = 0; while ((len = fis.read(bys)) != -1) { System.out.print(new String(bys, 0, len)); } // 释放资源 fis.close(); }
# ## OutStream
FileOutputStream构造:
FileOutputStream(File file) 参数为文件路径
FileOutputStream(String name) 参数为文件名 当前项目的跟目录下
@Test public void write() throws IOException { FileOutputStream fos = new FileOutputStream("d://fos.txt"); //写数据 fos.write("hello,IO".getBytes()); fos.write("java".getBytes()); fos.close(); }
public void write(int b) 写一个字节
@Test public void write() throws IOException { // 创建字节输出流对象 FileOutputStream fos = new FileOutputStream("fos.txt"); int text= 98; // 调用write()方法 fos.write(text); }
public void write(byte[] b) 写一个字节数组
@Test public void write() throws IOException { // 创建字节输出流对象 FileOutputStream fos = new FileOutputStream("fos1.txt"); byte[] bys={97,98,99,100,101}; fos.write(bys); }
public void write(byte[] b,int off,int len) 写一个字节数组的一部分
@Test public void write() throws IOException { // 创建字节输出流对象 FileOutputStream fos = new FileOutputStream("fos1.txt"); byte[] bys={97,98,99,100,101}; fos.write(bys,1,3); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构