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(数据);
相关推荐
一只大袋鼠18 分钟前
Git 进阶(二):分支管理、暂存栈、远程仓库与多人协作
java·开发语言·git
LuminousCPP1 小时前
数据结构 - 线性表第四篇:C 语言通讯录优化升级全记录(踩坑 + 思考)
c语言·开发语言·数据结构·经验分享·笔记·学习
魔法阵维护师1 小时前
从零开发游戏需要学习的c#模块,第十四章(保存和加载)
学习·游戏·c#
德思特1 小时前
从 Dify 配置页理解 RAG 的重要参数
java·人工智能·llm·dify·rag
YOU OU1 小时前
Spring IoC&DI
java·数据库·spring
один but you2 小时前
从可变参数到 emplace:现代 C++ 性能优化的核心组合
java·开发语言
_李小白2 小时前
【android opencv学习笔记】Day 17: 目标追踪(MeanShift)
android·opencv·学习
一只机电自动化菜鸟2 小时前
一建机电备考笔记(40) 建筑机电施工—排水管道施工(含考频+题型)
经验分享·笔记·学习·职场和发展·课程设计
是码龙不是码农2 小时前
ThreadPoolExecutor 7 个核心参数详解
java·线程池·threadpool
2301_818730562 小时前
numpy的学习(笔记)
学习·numpy