File类、字节流、字节流、属性集Properties、JavaBean、ResourceBundle工具类、递归 、字符流 等知识点常用方法概况

目录

File类

字节流

字节输出流:FileOutputStream类

字节输入流:FileInputStream类

字节缓冲流

字节输入缓冲流:BufferedInputStream类

字节输出缓冲流:BufferedOutputStream类

属性集:Properties

JavaBean:

ResourceBundle工具类

递归

字符流:

字符流 = 字节流 + 编码表

字符输出流:Writer类(抽象类)

构造方法:

常用方法:

字符输出流的使用步骤:

使用字符流时的注意事项:

字符输入流:Reader类(抽象类)

构造方法:

常用方法:

字符缓冲流:

字符输入缓冲流特有方法:

字符输出缓冲流特有方法:

流分类

转换流的作用:

 字节转换为字符的流:InputStreamReader类

字符转换为字节的流:OutputStreamWriter类  

对象操作流的分类:

反序列化流:java.io.ObjectInputStream类

ObjectOutputStream:  

 ObjectInputStream类


File类

//作用: 在Java程序中用来对文件数据进行定义的类型(表示:文件类型)
//File:即可以当做文件,也可以当做目录

//构造方法
File file = new File(String  路径);
File file = new File(String 父路径 , String 子路径);
File file = new File(File 父对象 , String 子路径);

//常用方法:
创建文件         //boolean   createNewFile()
创建目录			//boolean   mkdir()、mkdirs()
删除文件或目录			//boolean   delete()
判断:文件或目录是否存在     //boolean  exists()
判断:是文件				//boolean  isFile()
判断:是目录				//boolean  isDirectory()
获取:文件名      //String  getName()
获取:目录下的所有内容 		//File[]   listFiles()
获取:父级目录    //String   getParent();
获取:文件大小    //boolean    length()

字节流

字节输出流:FileOutputStream类

//作用: 以字节为单位,向文件中写入字节数据

//构造方法 (关联文件不存在时:创建文件; )
FileOutputStream fos = new FileOutputStream("关联文件路径");//覆盖写入
FileOutputStream fos = new FileOutputStream("关联文件路径", true);//追加写入
FileOutputStream fos = new FileOutputStream(File 文件对象);//覆盖写入
FileOutputStream fos = new FileOutputStream(File 文件对象, true);//追加写入

//常用方法
write(int data)//写入1个字节数据
write(byte[] buf) //写入多个字节数据
write(byte[] buf, int index , int len);//从buf数组的index索引开始,取len个字节写入到文件   
close() //释放资源

字节输入流:FileInputStream类

//作用: 以字节为单位,从文件中读取字节数据

//构造方法
FileInputStream fis = new FileInputStream("关联文件路径");
FileInputStream fis = new FileInputStream(File 文件对象);

//常用方法
int read(); //读取1个字节数据,返回实际读取到的字节数据。 读取到文件末尾时:返回-1 
int read(byte[] buf); //最多读取buf.length()个字节数据,读取到的字节数据存储到buf数组中,并返回实际读取到的字节数据个数。 读取到文件末尾时:返回-1
close() //释放资源

字节缓冲流

字节输入缓冲流:BufferedInputStream类

//作用: 以字节为单位,从文件中读取字节数据。  性能比普通字节流高一些。

//特殊之处: 字节缓冲流自身不具备读数据的操作,需要依赖普通的字节流实现读数据

//构造方法
BufferedInputStream bis = new BufferedInputStream( new FileInputStream("关联文件"));

//常用方法: 参照普通字节输入流

字节输出缓冲流:BufferedOutputStream类

//作用: 以字节为单位,向文件中写入字节数据。  性能比普通字节流高一些。

//特殊之处: 字节缓冲流自身不具备写数据的操作,需要依赖普通的字节流实现写数据

//构造方法
BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream("关联文件"));//覆盖写入
BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream("关联文件", true));//追加写入

//常用方法: 参照普通字节输出流

属性集:Properties

//作用: 从配置文件中读取数据。把读取到的数据以key/value形式存储

//构造方法
Properties prop = new Properties();

//常用方法:
  //做为集合
  void setProperty(String key , String value);
  String getProperty(String key);
  Set<String>  stringPropertyNames();   //获取所有key元素

  //结合IO流
  void load(InputStream input); //把配置文件中的信息读取到Properties对象中
  void store(OutputStream output,String 注释);//把Properties对象中的数据写入到配置文件中

JavaBean:

Bean:翻译过来是"豆"意思。      Bean:是Java中是一个统称。
    
JavaBean: 其实就是一个Java封装类。
    
Java封装类: 
1. 私有成员变量
2. 构造方法
3. 公开的getter、setter方法    

ResourceBundle工具类

  • 属于包:java.util

  • 作用: 用来读取程序以.properties结尾的配置文件

    • 结论:可以代替之前学习的Properties类

  • 使用


//获取ResourceBundle对象
ResourceBundle  getBundle(String  配置文件名字);
//要求: 1、只需要书写配置文件名,不要扩展名;   2、配置文件必须存放在项目的src目录下
//示例: 在当前项目的src目录下有一个名为: itheima.properties   文件
ResourceBundle bundle = ResourceBundle.getBundle("itheima");

//常用方法
String value = ResourceBundle对象.getString(String key)

结论:ResourceBundle工具类,会自动的去项目src目录下,读取以.properties结尾的配置文件

递归

//什么是递归?
方法自己调用自己(递归是应用在方法的调用上)
    
递归 = 递进 + 回归
    
//在使用递归时的弊端:
递归需要方法进入到栈内存中运行,当递归次数过多时,栈内存可能会被占满,会造成:内存溢出
    
//示例:
public int getSum(int num){
    //边界条件:控制递归的上限(不能无限递归)
    if(num==1){
        return 1;//回归
    }
   
    //递进:调用方法,每次-1
    int sum = num + getSum(num-1);
    return sum;
}
    

字符流:

字符为单位,对文件进行读写操作

字符流 = 字节流 + 编码表

  • 字符流底层还是使用字节流读写数据

  • 在使用字节流读写数据时,会根据编码表,来进行数据转换

  • 字节流读数据时,会根据编码表来决定读几个字节,当编码表为GBK编码表时,会一次读取2个字节,在把2个字节根据GBK编码表,合并为一个中文

    文件内容: 你好
    编码表:   GBK
              你 = -22  -111
              好 = -19  -76
        
    字节流读取时,是GBK编码,就一次会读取2个字节:   -22  -111 
    在根据GBK编码表,把-22和-111合并,转换为:生活中的数据  

    字符输出流:Writer类(抽象类)

  • 以字符为单位,向文件中写入字符数据

  • 使用字符输出流时,使用的是Writer类的子类:FileWriter

  • 构造方法:

    //根据给定的File对象,创建字符输出流对象
    FileWriter fw = new FileWriter(File file); //覆盖写入
    //根据给定的文件路径,创建字符输出流对象
    FileWriter fw = new FileWriter(String path); //覆盖写入
    
    FileWriter fw = new FileWriter(String path , true);//追加写入
    FileWriter fw = new FileWriter(File file , true); //追加写入

    常用方法:

  • //写字符数据
    write(int data) //写入一个字符数据
    write(char[] chs) //写入多个字符数据
    write(char[] cbuf ,  int index ,  int len) //写入多个字符数据   
        
    write(String str)//写入字符串数据   
    write(String str ,  int index ,  int len)    
        
        
    //刷新流
    flush()    
    //关闭流
    close()   

  • 字符输出流的使用步骤:

    1. 创: 创建字符输出流对象,并关联一个文件

    2. 写: 写入字符数据

    3. 关: 释放资源

  • 使用字符流时的注意事项:

字符流 = 字节流 + 编码表

底层在使用字节流,写入中文数据时:是把中文的两个或三个字节数据,先写入到一个缓冲区[数组]
结论:字符数据并不是直接写入到文件中,而先写入到缓冲区(数组:在内存中存储)  

//刷新流 (流没有关闭)
flush()   //把缓冲区中的字节数据写入到文件中

字符输入流:Reader类(抽象类)

  • 以字符为单位,从文件中读取字符数据

  • 使用字符输入流时,使用的是Reader类的子类:FileReader

  • 构造方法:

  • //根据给定的File对象,创建字符输入流对象
    FileReader fr = new FileReader(File file); 
    
    //根据给定的文件路径,创建字符输入流对象
    FileReader fr = new FileReader(String path); 

    常用方法:

  • //读字符数据
    //读取1个字符
    int read()  //一次读取1个字符数据,返回读取到的字符数据(编码值),读取到文件末尾返回:-1
    
    //读取多个字符(存储在字符数组中)
    int read(char[] cbuf) //一次最多读取cbuf.length()个字符数据,并把读取到的字符数据存储到cbuf数组中。返回实际读取到字符数据的个数, 读取到文件末尾返回:-1   
    

    字符缓冲流:

  • 字符输入缓冲流:BufferedReader类

    • 缓冲流,自身并不具备直接读数据的能力,需要依赖普通的字符输入流实现

  • 字符输出缓冲流:BufferedWriter类

    • 缓冲流,自身并不具备直接写数据的能力,需要依赖普通的字符输出流实现

      //创建字符输入缓冲流对象
      BufferedReader br = new BufferedReader( new FileReader("关联文件") );
      
      //创建字符输出缓冲流对象
      BufferedWriter bw = new BufferedWriter( new FileWriter("关联文件") );

      使用普通字符流和字符缓冲流:复制文件,对比性能:

    • 读1个字符、写1个字符:

      • 普通字符流:46毫秒

      • 缓冲流:7毫秒

    • 在开发中,使用字符缓冲流的最方便之处:可以实现按行读取数据

字符输入缓冲流特有方法:

字符输出流:

  • 按行读取字符数据: 一次读取一行文本数据

  • String  readLine();  //一次读取一行数据(不包含:\r\n), 读取到文件末尾时:返回null

    字符输出缓冲流特有方法:

  • 写入换行符:

  • void newLine(); //根据不同的操作系统,写入不同换行符
    
    
    //windows系统: \r\n
    //linux系统:\n 
    //mac系统:\r
    
    //通常在开发Java程序,Java程序可以实现跨平台。也就希望:换行符也能跨平台
    fw.write("\r\n");//向文件中写入换行符(windows系统专用)

    流分类

  • 基础流:

  • 普通的字节流

  • 普通的字符流

  • 高效流

  • 字节缓冲流

  • 字符缓冲流

  • 特殊的流

  • 转换流

  • 对象操作流(序列化流)

  • 打印流

  • 字节输入流

  • 顶层父类:Reader

    • 子类:InputStreamReader (转换流)

      • 子类:FileReader

  • 字节输出流

  • 顶层父类:Writer

    • 子类:OutputStreamWriter (转换流)

      • 子类:FileWriter

转换流的作用:

  1. 在字节流和字符流之间进行转换

    • 把字节流转换为字符流

    • 把字符流转换为字节流

  2. 使用转换流对特定编码的文本文件进行读写操作

//转换流: 把GBK编码的文件读取出来后,以UTF-8编码写入到另一个文件
//源文件:GBK编码
//目标文件:UTF-8编码

 字节转换为字符的流:InputStreamReader类

//转换流:自身不具备直接读写文件的能力,需要依赖普通字节流

//创建一个使用默认字符集(编码表:UTF-8),来读取字符数据的转换流对象
InputStreamReader isr = new InputStreamReader(new FileInputStream("关联文件"));


//经常使用的构造方法:
//在创建转换流对象时,指定编码表
InputStreamReader isr = new InputStreamReader(new FileInputStream("关联文件"),String 编码表名字);
//示例:  指定编码表为gbk
InputStreamReader isr = new InputStreamReader(new FileInputStream("关联文件"),"gbk");

编码、解码:

  • 编码和解码时,必须保证使用同一个编码表

  • 当编码和解码时,使用的不是同一个编码表时,会出现:乱码

字符转换为字节的流:OutputStreamWriter类  

//根据给定的编码表名字,创建转换流对象
//按照给定的编码表,来向文件中写入符合编码表的字符数据
OutputStreamWriter osw = new OutputStreamWriter(new FileWriter("关联文件"), 编码表名字);


//创建一个使用默认字符集(编码表:UTF-8),写入字符数据的转换流对象
OutputStreamWriter osw = new OutputStreamWriter(new FileWriter("关联文件"));

对象操作流: 也称为序列化流

  • 在Java中使用最多的就是对象(创建对象,对象中存储数据)

  • 对象操作流作用: 把创建的对象(含对象中存储的数据)写入到文件中

对象操作流的分类:

  • 序列化流:java.io.ObjectOutputStream类

    • 把内存中的对象,写入到文件中(打开文件是看不懂的)

    • 把内存中的对象,向网络中另一台计算机中传输

  • 反序列化流:java.io.ObjectInputStream类

    • 把文件中存储的对象,读取到内存中(在内存中会重新生这个对象)

    • 接收网络中另一台计算机传递过来的对象

ObjectOutputStream:  

//构造方法
ObjectOutputStream oos = new ObjectOutputStream(OutpuStream output);


//常用方法:
//把对象写入到文件中
void writeObject(Object obj)

在使用序列化流,向文件中写入对象时,会遇到一个异常:NotSerializableException

引发异常的原因: 实例化的对象没有实现Serializable接口
    
解决方案:让类实现Serializable接口    

 ObjectInputStream类

//构造方法
ObjectInputStream osi = new ObjectInputStream(InputStream input)


//常用方法:
//读取文本中存储的对象
Object  readObject();

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值