java Io流学习归纳

- 固定套路:1. 创建IO流对象 2. 读写文件 3. 关闭流

- 固定的API方法:

java 复制代码
//读:read():
/*读一个字节/字符*/
  int  read()    

  /*读一个字节/字符数组*/  
  int  read(byte[] buf)
  int  read(char[] cbuf)    
 
 
  //写:write():
  /*写一个字节/字符*/
  write(int data) 
   
  /*写一个字节/字符数组*/
  write(byte[] buf , int index , int len)
  write(char[] buf , int index , int len)   
 
  write(String s)  // 写字符串(针对字符流)
      
  
  close()   //关闭流 
      
  
  flush()     //针对字符流、缓冲流

- 基础流:

java 复制代码
  /*字节流 : 读写任意类型的文件*/
  FileInputStream fis = new FileInputStream(关联文件对象)
  FileOutputStream fos = new FileOutputStream("关联文件")    
  FileOutputStream fos = new FileOutputStream("关联文件", true)//追加写入
      
  /*字符流 : 针对纯文本文件进行读写*/
  FileReader  fr = new FileReader("关联文件")
  FileWriter fw  = new FileWriter("关联文件")    
  FileWriter fw  = new FileWriter("关联文件",true) //追加写入       

- 缓冲流(高效流):自身不具备读写能力,要依赖基础流(特点:提高读写效率)

java 复制代码
  /*字节缓冲流*/
  BufferedInputStream bis = new BufferedInputStream( FileInputStream对象(转换流也行) )
  BufferedOutputStream bos = new BufferedOutputStream( FileOutputStream对象 (转换流也行))   
 
 
  /*字符缓冲流*/
  BufferedReader br = new BufferedReader( FileReader对象 )
  BufferedWriter bw = new BufferedWriter( FileWriter对象 )  

  /*读一行(特有)*/
 String s1 = br.readLine()

 /*写一空行(特有)*/
 bw.newLine()

- 转换流:自身不具备读写能力,要依赖基础流(特点:针对特有编码表的文件进行读写)

java 复制代码
InputStreamReader isr = new InputStreamReader(基础字节流对象,"编码格式");//输入


OutputStreamWriter osw = new OutputStreamWriter(基础字节流对象,"编码格式");//输出

对象操作输入流(反序列化流): 从文件中读取存储的对象:

java 复制代码
 ObjectInputStream ois = new ObjectInputStream(FileInputStream对象(转换流也行));

 类 对象 =   ois.readObject();

 List<类名> 对象List = (List<类名>) ois.readObject(); //使用反序列化流读取文件中的多个对象

对象操作输出流(序列化流): 把内存中创建的对象,写入到文件中:

java 复制代码
 /*创建序列化流对象*/
ObjectOutputStream oos = new ObjectOutputStream(FileOutputStream对象 (转换流也行));

 oos.writeObject(序列化对象);//把对象写入到文件中

/*写入多个对象*/
List<类名> 对象List = new ArrayList<>();
Collections.addAll(对象List, 对象1,对象2);

序列化对象 :

java 复制代码
public class 类名 implements Serializable {

    private static final long serialVersionUID = 1L; //手动添加serialVersionUID的值,避免动态修改该类导致读取serialVersionUID的值不一致报错。

    private transient 类型 名称;//该成员变量不参与序列化操作,关键字:transient 

}

打印流:

java 复制代码
 PrintStream ps = new PrintStream("写入文件的路径/文件名.txt");

ps.print(数据);//不换行,写入
ps.println(数据);//换行,写入

/*日志使用:*/
  System.setOut(ps);
 System.out.println(数据);
相关推荐
tongluowan0072 分钟前
Redisson的参数及工作原理
java·redis·lua·分布式锁
仙俊红38 分钟前
Integer\int对比,equals()\hashcode面试
java·面试·职场和发展
WiChP1 小时前
【V0.1B10】从零开始的2D游戏引擎开发之路
java·数据库·游戏引擎
云烟成雨TD1 小时前
Spring AI Alibaba 1.x 系列【60】检查点机制原理与全流程剖析
java·人工智能·spring
ForgeAI码匠1 小时前
Maven 多模块项目如何避免越写越乱?Forge Admin 的模块边界实践
java·人工智能·开源·maven
z落落1 小时前
C# 数组 最终完整版全套笔记(一维+多维+交错+引用类型+对象数组)
java·笔记·c#
Access开发易登软件1 小时前
Access 和 SQLite,根本不在一个赛道上
java·jvm·数据库·sqlite·excel·vba·access开发
小马爱打代码1 小时前
Spring源码 第十篇:Spring 5 源码深度拆解 - Spring 类型转换与校验体系
java·spring
长谷深风1111 小时前
Java 面试高频:反射机制与异常体系全面解析
java·开发语言·面试·exception·java 反射·java 异常·class 对象
searchforAI2 小时前
B站视频转笔记用哪个工具?2026年四款AI笔记工具对比实测
人工智能·经验分享·笔记·gpt·学习·视频总结·ai笔记