JAVA基础学习总结,day19(IO流基础)

IO 流:

I:Input 输入:读取数据 从外部存储设备 读取数据到 内存中
O:Output 输出:写出数据 从内存中写出数据到 外部存储设备
概述:Java中I/O操作只要是指使用java.io包下的内容,进行输入、输出操作。输入也叫做读取数据。输出也叫做作写出数据

注意:字符流主要操作文本文件

IO的分类:

  • 按类型分:

    • 字节流:以单个字节为基本单位来操作数据
      • 字节输入流:顶层类 InputStream 抽象是表示输入字节流的所有类的父类 常用子类:FileInputStream
      • 字节输出流:顶层类 OutputStream 抽象类是表示字节输出流的所有类的父类 常用子类:FileOutputStream
    • 字符流:以单个字符为基本单位来操作数据
      • 符输入流:顶层类 Reader 用于读取字符流的抽象类 常用子类:FileReader
      • 字符输出流:顶层类 Writer 用于写入字符流的抽象类 常用子类:FileWriter
  • 按流向分:

    • 输入流:
      • 字节输入流:顶层类 InputStream 抽象是表示输入字节流的所有类的父类 常用子类:FileInputStream
      • 字符输入流:顶层类 Reader 用于读取字符流的抽象类 常用子类:FileReader
    • 输出流:
      • 字节输出流:顶层类 OutputStream 抽象类是表示字节输出流的所有类的父类 常用子类:FileOutputStream
      • 字符输出流:顶层类 Writer 用于写入字符流的抽象类 常用子类:FileWriter

1.集合的顶层是一个接口,而IO流的顶层是一个抽象类
2.如果一个中文是以gbk编码形式存储的,就是占2个字节
3.如果一个中文是以utf-8编码形式存储的,就是占3个字节
4.Windows系统中默认是gbk编码,idea开发工具默认的是utf-8编码
5.如果一个中文是以gbk编码形式存储的,用utf-8编码打开,那么就会出现乱码
6.计算机中存储任何数据都是以二进制的形式存储的

字节输出流:OutputSteam 中定义的基本共性方法。
public void close(): 关闭此输出流并释放与此流相关联的任何系统资源
public void flush(): 刷新此输出流并强制任何缓冲的输出字节被写出
public abstract void write(int b) : 将指定的字节输出流, 写入一个字节数据到目的文件
public void wiate(byte[] b); 将b.length字节从指定的字节数组写入此输出流,写入一个字节数组的字节数据到目的文件
public void wiate(byte[] b, int off,int len): 从指定的字节数组写入len字节,从偏移量off开始输出到此输出流,(从指定off索引位置开始写入到此文件,len是输出几个字节)写指定长度的字节数组到目的文件小贴士:close方法,当完成流的操作时,必须调用此方法,释放系统资源

FileOutputStream 子类
构造方法:
public FileOutputStream(File file): 创建文件输出流以写入由指定的File对象表示文件
public FileOutputStream(String name): 创建文件输出流以指定的名称写入文件
public FileOutputStream(File file , boolean append): 创建文件输出流以写入由指定的File对象表示文件,true是拼接文件内的内容,false是替换文件内的内容
public FileOutputStream(String name , boolean append): 创建文件输出流以指定的名称写入文件,true是拼接文件内的内容,false是替换文件内的内容

注意:当你创建一个流对象时,必须传入一个文件路径。该路径下,如果没有这个文件,会创建该文件。如果有这个文件,会清空这个文件的数据

字节输入流:InputStream 基本共性功能方法:
public void close(): 关闭此输出流并释放与此流相关联的任何系统资源
public abstract int read(): 从输入流读取数据的下一个字节,读取一个字节
public int read(byte[] b): 从输入流中读取一些字节数,并将它们存储到字节数组b中
小贴士:close方法,当完成流的操作时,必须调用此方法,释放系统资源

FileInputStream 子类
构造方法
FileInputStream(File file); 通过打开与实际文件的连接来创建一个FileInputStream,该文件由文件系统中的File对象flie命名
FileInputStream(String name): 通过打开与实际文件的连接来创建一个FlieInputStream,该文件由文件系统中的路径名name命名

注意:当你创建一个流对象时,必须传入一个文件路径。该路径下,如果没有该文件,会抛出

FileNotFoundException
字符输入流:Reader 基本共性功能方法。
public void close(): 关闭流
public int read(): 从输入流读取一个字符
public int read(char[] cbuf): 从输入流中读取一些字符,并将它们存储到字符数组中

FileReader 子类
构造方法
FileReader(File file): 创建一个新的FileReader,给定要读取的File对象
FileReader(Steing FileName): 创建就一个新的FileReader,给定要读取的文件的名称

注意:当你创建一个流对象时,必须传入一个文件路径,

字符输出流:Writer 基本共性功能方法
public abstract void close() :关闭此输出流并释放与此流相关联的任何系统资源。
public abstract void flush() :刷新此输出流并强制任何缓冲的输出字符被写出。
public void write(int c) :写出一个字符。
public void write(char[] cbuf) :将 b.length字符从指定的字符数组写出此输出流。写出一个字符数组
public abstract void write(char[] b, int off, int len) :从指定的字符数组写出 len字符,从偏移量 off开始输出到此输出流。
public void write(String str) :写出一个字符串。

FileWriter 子类
构造方法
FileWriter(File file) : 创建一个新的 FileWriter,给定要读取的File对象。
FileWriter(String fileName) : 创建一个新的 FileWriter,给定要读取的文件的名称。
FileWriter(File file, boolean append): 创建一个新的,true是拼接文件内的内容,false是替换文件内的内容
FileWriter(String fileName,boolean append)) :创建一个新的,true是拼接文件内的内容,false是替换文件内的内容

注意:当你创建一个流对象时,必须传入一个文件路径,

回车符 \r 和换行符 \n :
回车符:回到一行的开头(return)。
换行符:下一行(newline)。
系统中的换行:Windows系统里,每行结尾是 回车+换行 ,即 \r\n ;
Unix系统里,每行结尾只有 换行 ,即 \n ;
Mac系统里,每行结尾是 回车 ,即 \r 。从 Mac OS X开始与Linux统一。

字节:
在这里插入图片描述
在这里插入图片描述

字符:
在这里插入图片描述
在这里插入图片描述

IO异常的处理
jdk7以前处理(重要)

public class HandleException1 {   
public static void main(String[] args) {       
// 声明变量           
FileWriter fw = null;        
  try {            
  //创建流对象            
  fw = new FileWriter("fw.txt");            
  // 写出数据            
  fw.write("程序员"); //程序员        
  } catch (IOException e) {            
    e.printStackTrace();        
  } finally {            
    try {                
      if (fw != null) {                    
        fw.close();                
       }            
     } catch (IOException e) {                
      e.printStackTrace();           
     }        
  }    
 }
 }

jdk7 处理IO流异常的格式:

try (创建流对象语句,如果多个,使用';'隔开) {
	// 读写数据    
 } catch (IOException e) {      
 	e.printStackTrace();     
 }

jdk9 的改进(了解)

public class TryDemo {    public static void main(String[] args) throws IOException {        
// 创建流对象          
final  FileReader fr  = new FileReader("in.txt");        
FileWriter fw = new FileWriter("out.txt");       
 // 引入到try中          
 try (fr; fw) {          
    // 定义变量             
    int b;          
    // 读取数据             
    while ((b = fr.read())!=1) {                
      // 写出数据                  
      fw.write(b);               
    }           
  } catch (IOException e) {            
     e.printStackTrace();        
  }    
}
} 

Properties 属性列表集合
概述:实现Map,可以当双列集合用,但是主要作用是获取一个文件的信息,是一个持久集
基本的存储方法:
public Object setProperty(String key, String value) : 保存一对属性。(存储键值对到集合)
public String getProperty(String key) :使用此属性列表中指定的键搜索属性值。(根据键找值)
public Set stringPropertyNames() :所有键的名称的集合。 (找出所有的键存到Set集合中)

与流相关的方法 (重点中的重点)
public void load(InputStream inStream) :把文件中的内容拷贝到Properties集合中,以键值对的形式
public void store(OutputStream outstream): 指定文件替换文件中的内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值