IO流的基本使用

1. 简介


1.1. IO流的分类
  • 按照流中数据流动的方向,可以分为输入流输出流
  • 按照数据在流中的大小单位,可以分为字节流字符流
1.2. 基础的IO流

​ 在java.io包中有很多流,但基本上所有的流都直接或者间接继承自这几个流,这几个流也被称为父类流。

  • 字节输入流:InputStream

  • 字节输出流:OutputStream

  • 字符输入流:Reader

  • 字符输出流:Writer

1.3. 注意事项:
  • 他们都是抽象类,不能直接实例化,需要借助子类对象

  • 流对象一旦实例化完成,此时这个流会持有这个文件,此时将不能对这个文件进行某些操作

  • 流在使用后需要释放资源

2. 基础流


2.1. InputStream & FileInputStream
  1. FileInputStream的构造方法

    FileInputStream(File file);
    FileInputStream(String file);
    
  2. FileInputStream的常用方法

    //每次读取一个字节
    int read();
    //读取流中数据,存到arr数组中
    int read(byte[] arr);
    
    try(InputStream fileInputStream=new FileInputStream("directory\\day24\\test")){
        //1.实例化一个字节数组,用来读取流中的数据
        byte[] array=new byte[512];
        int count;
        while ((count=fileInputStream.read(array))!=-1){
            //将读取的[0,count)转换成字符串
            String str=new String(array,0,count);
            System.out.print(str);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    
2.2. OutputStream & FileOutStream
  1. FileOutputStream的构造方法

    FileOutputStream(File file);
    FileOutputStream(File file,boolean b);	//第二个代表是否是追加数据
    FileOutputStream(String file);
    FileOutputStream(String file,boolean b);
    
  2. FileOutputStream的常用方法

    write(int b);
    write(byte[] array);
    write(byte[] array,int start,int end);
    flush();//冲刷输出流,加速流中的数据流动到文件中
    
2.3. Reader & FileReader
  1. FileReader的构造方法

    FileReader(File file);
    FileReader(String fileName);
    
  2. FileReader的常用方法

    read()//               : 从输入流中读取一个字符,这个方法的返回值,并不是一个char,而是一个int。这个int,就是这个字符在字符集中存储的数字
    read(char[] array) //  : 从输入流中读取数据到一个字符数组中
    
2.4. writer & FileWriter
  1. FileWrite的常用方法

    write(int c)                                : 将一个字符,写入到输出流中
    write(char[] array)                         : 将一个字符数组中的所有的数据写到输出流中
    write(char[] array, int offset, int length) : 将一个字符数组中指定部分的数据写入到输出流中
    write(String str)                           : 将一个字符串中的数据写入到输出流中
    write(String str, int offset, int length)   : 将一个字符串中的指定部分的数据写入到输出流中
    
2.5. 拷贝文件夹\文件
/**
 * 拷贝文件夹,给的是源文件,以及目标地址,因此我们需要先得到“目标文件”
 * @param src   源文件
 * @param dise  目标地址
 */
private static void copyDirectory(File src,File dise){
    //得到目标文件的File
    File file=new File(dise,src.getName());
    //源文件是文件,拷贝并退出
    if (src.isFile()){
        copy(src,file);
        return;
    }
    //源文件是个目录,创建目标地址,将目录内的数据遍历拷贝
    file.mkdirs();
    File[] files = src.listFiles();
    for (File f : files) {
        //将源文件,和目标文件夹传递过去
        copyDirectory(f,file);
    }
}

/**
 * 拷贝文件
 * @param src   源文件
 * @param dise  目标文件
 */
private static void copy(File src,File dise){
    try(BufferedReader bufferedReader=new BufferedReader(new FileReader(src));
        BufferedWriter bufferedWriter=new BufferedWriter(new FileWriter(dise,true))) {
        String line=null;
        while ((line=bufferedReader.readLine())!=null){
            bufferedWriter.write(line);
            bufferedWriter.newLine();
            bufferedWriter.flush();
        }

    } catch (IOException e) {
        e.printStackTrace();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值