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(数据);
相关推荐
范什么特西15 小时前
狂神报错页面设置
java·tomcat
架构师沉默15 小时前
AI 真的会取代程序员吗?
java·后端·架构
天若有情67315 小时前
循环条件隐藏陷阱:我发现了「同循环双条件竞态问题」
c++·学习·算法·编程范式·while循环··竞态
Memory_荒年16 小时前
ReentrantLock 线程安全揭秘:从“锁”到“重入”的魔法
java·后端·源码
L0CK16 小时前
秒杀异步下单业务逻辑梳理
java
zuoerjinshu16 小时前
【spring专题】编译spring5.3源码
java·后端·spring
JavaGuide16 小时前
鹅厂面试:SELECT * 一定导致索引失效?常见索引失效场景有哪些?
java·数据库·后端·mysql·大厂面试
Amazing_Cacao16 小时前
褪去故事滤镜:重建精品可可的“结构语言”
笔记·学习
QuZero16 小时前
Java `volatile` and Memory Model
java·jvm
me83216 小时前
【Java】解决Maven多模块父POM加载失败+IDEA无法新建Java类问题
java·maven·intellij-idea