JavaSE之IO(一)

JavaSE之IO字节流-字符流-properties集合

在这里插入图片描述

1.字节流

在这里插入图片描述

1.OutputStream

1).OutputStream介绍
    java.io.OutputStream:字节输出流
        此抽象类是表示输出字节流的所有类的超类
    定义了一些子类共性的成员方法:
        - public void close():关闭此输出流并释放与此流向关联的任务系统资源
        - public void flush():刷新此输出流并强制任何缓冲的输出字节呗写出
        - public void write(byte[] b):将b.length字节从指定的字节数组写入此输出流
        - public void write(byte[] b,int off, int len):将指定的字节数组写入len字节,从偏移量off开始输出到此输出流
        - public abstract void write(int b):将指定的字节输出流
2).FileOutputStream
    public class FileOutputStream extends OutputStream
    FileOutputStream:文件字节输出流
    作用:把内存中的数据写入到硬盘的文件中
    构造方法:
        FileOutputStream(String name)创建一个向具有指定名称的文件中写入数据的数据文件流
        FileOutputStream(File file)创建一个向指定File对象表示的文件中写入数据的文件输出流
        参数:写入数据的目的
            String name:目的地是一个文件的路径
            File file:目的地是一个文件
        FileOutputStream(String name, boolean append)创建一个向具有指定名称的文件中写入数据的数据文件流
        FileOutputStream(File file, boolean append)创建一个向指定File对象表示的文件中写入数据的文件输出流
        参数:写入数据的目的
            String name:目的地是一个文件的路径
            File file:目的地是一个文件
            boolean append
                true:创建对象不会覆盖源文件,继续在文件的末尾追加写数据
                false:创建一个新文件,覆盖原文件
        构造方法的作用:
            1.创建一个FileOutputStream对象
            2.会根据构造方法中传递的文件/文件路径,创建一个空的文件
            3.会把FileOutputStream对象指向创建好的文件
3).写入数据的原理(内存—>硬盘)
  • java程序–>JVM(java虚拟机)–>OS–>OS调用写数据的方法–>把数据写入到文件中
4).字节输出流的使用步骤
  • 1.创建一个FileOutputStream对象,构造方法中传递写入数据的目的地
  • 2.调用fileOutputStream对象中的write方法,将数据写入到文件中
  • 3.释放资源(流使用会占用一定的内存,使用完毕要把内存清空,提高程序的效率)
    在这里插入图片描述

2.InputStream

1).InputStream介绍
    java.io.InputStream:字节输入流
        此抽象类是表示输入字节流的所有类的超类
    定义了一些子类共性的成员方法:
        - public void close():关闭此输入流并释放与此流向关联的任务系统资源
        - public int read():从输入流中读取数据的写一个字节(读到末尾,返回-1- public int read(byte[] b):从输入流中读取一定数量的字节,并将起存储出道缓冲区数组b中
2).FileInputStream
    public class FileInputStream extends InputStream
    FileInputStream:文件字节输入流
    作用:把硬盘文件中的数据,读取到内存中
    构造方法:
        FileInputStream(String name)创建一个向具有指定名称的文件中写入数据的数据文件流
        FileInputStream(File file)创建一个向指定File对象表示的文件中写入数据的文件输出流
        参数:写入数据的目的
            String name:文件的路径
            File file:一个文件
        构造方法的作用:
            1.创建一个FileInputStream对象
            2.会把FileOutputStream对象指向构造方法中要读取的文件
3).写入数据的原理(硬盘—>内存)
  • java程序–>JVM(java虚拟机)–>OS–>OS调用读数据的方法–>读取文件
4).字节输入流的使用步骤
  • 1.创建一个FileInputStream对象,构造方法中传递读取的数据源
  • 2.调用fileInputStream对象中的read方法,读取文件
  • 3.释放资源(流使用会占用一定的内存,使用完毕要把内存清空,提高程序的效率)
    在这里插入图片描述

3.字节流练习(复制图片)

1).复制流程

在这里插入图片描述

2).代码实现
package com.michael;

import java.io.FileInputStream;
import java.io.FileOutputStream;

public class LearnIO02 {
    public static void main(String[] args) throws Exception{
        FileOutputStream fileOutputStream = new FileOutputStream("copyFile.jpg");
        FileInputStream fileInputStream = new FileInputStream("ID反面.jpg");

        long start = System.currentTimeMillis();
        int len = 0;

/*     copy the file by byte array
        byte[] buffer = new byte[1024];
        while ((len = fileInputStream.read(buffer))!=-1){
            fileOutputStream.write(buffer,0,len);
        }*/
        while((len = fileInputStream.read())!= -1){
            fileOutputStream.write(len);
        }

        fileInputStream.close();
        fileOutputStream.close();
        long end = System.currentTimeMillis();
        System.out.println("coping the file costs :"+(end-start)+"milliseconds");

    }
}

2.字符流

在这里插入图片描述

1.Reader

1).Reader介绍
    java.io.Reader:字符输入流,是字符输入流的最顶层的父类,定义了一些共性的成员方法,是一个抽象类

    共性的成员方法:
        int read()读取单个字符并返回
        int read(char[] cbuf)一次读取多个字符,将字符读入数组
        void close()关闭该流并释放与之关联的所有资源
2).FileReader
    java.io.FileReader extends InputStreamReader extends Reader
    FileReader:文件字符输入流
    作用:把硬盘文件中的数据以字符的方式读取到内存

    构造方法:(读取文件的数据源)
        FileReader(String fileName):文件路径
        FileReader(File file):文件
        FileReader构造方法的作用
            1.创建一个FileReader对象
            2.把FileReader对象指向要读取得文件
3).FileReader读取文件
    public static void main(String[] args) throws Exception {
        FileReader fileReader = new FileReader("a.txt");
        char[] chars = new char[1024];
        int len = 0;
        while((len = fileReader.read(chars)) != -1){
            System.out.println(new String(chars,0,len));
        }

        fileReader.close();
    }

2.Writer

1).Writer介绍
    java.io.Writer:字符输出流,是字符输出流的最顶层的父类,定义了一些共性的成员方法,是一个抽象类

    共性的成员方法:
        void write(int c)写入单个字符并返回
        void write(char[] cbuf)写入字符数组
        abstract void write(char[] cbuf, int off, int len)写入字符数组得某一个部分,off数组得开始索引,len写得字符个数
        void write(String str)写入字符串
        void write(String str, int off, int len)写入字符串得某一个部分,off字符串得开始索引,len写得字符个数
        void flush()刷新该流得缓冲
        void close()关闭该流并释放与之关联的所有资源
2).FileWriter
    java.io.FileWriter extends OutputStreamWriter extends Writer
    FileWriter:文件字符输出流
    作用:把内存中字符数据写入到文件中

    构造方法:(读取文件的数据源)
        FileWriter(String fileName):文件路径
        FileWriter(File file):文件
        FileWriter构造方法的作用
            1.创建一个FileWriter对象
            2.根据构造方法中传递得文件/文件路径,创建文件
            3.把FileWriter对象指向创建好得文件
3).FileWriter写入文件

字符输出流得使用步骤:

  • 1.创建FileWriter对象,构造方法中绑定要写入数据得目的地
  • 2.使用FileWriter中得write方法,把数据写入到内存缓冲区中(字符转为字节得过程)
  • 3.使用FileWriter得flush方法,把内存缓冲区得数据,刷新到文件中
  • 4.释放资源close方法(会先把内存缓冲区中得数据刷新到文件中)
    public static void main(String[] args) throws Exception {
        FileWriter fileWriter = new FileWriter("b.txt");

        fileWriter.write("test the writer file");
        fileWriter.flush();
        fileWriter.write("test the writer file02");
        fileWriter.close();
    }

注意:

  • flush:刷新缓冲区,流对象可以继续使用
  • close:先刷新缓冲区,然后通知系统释放资源,流对象不在使用
4).FileWriter写入文件 续写和换行
    续写和追加:使用两个参数得构造方法
        FileWriter(String fileName, boolean append):文件路径
        FileWriter(File file, boolean append):文件
        参数:
            boolean append:续写开关
                true:不会创建写的文件覆盖原文件,可以续写
                false:创建新得文件覆盖原文件
                
        换行:换行符号
            windows:\r\n
            linux:/n
            mac:/r
  • 代码:
    public static void main(String[] args) throws Exception {
        FileWriter fileWriter = new FileWriter("b.txt",true);

        fileWriter.write("test the writer file");
        fileWriter.flush();
        fileWriter.write("\r\n");
        fileWriter.write("test the writer file02");
        fileWriter.close();
    }

3.Properties集合

    java.util.Properties extends Hashtable<Object,Object> implements Map<K,V>, Cloneable, java.io.Serializable
    Properties类表示了一个持久的属性集,Properties可以保存在流中或从流中加载。
    Properties集合是一个唯一和IO流结合的集合
        可以使用Properties集合中的方法store,把集合中的临时数据持久化到硬盘中存储
        可以使用Properties集合中的方法load,把硬盘中保存的文件(键值对),读取到集合中使用

    属性列表中每个键及其对应值都是一个字符串
        Properties集合是一个双列集合,key和value默认都是字符串
  • 代码示例
    public static void main(String[] args) {
        show01();
    }

    private static void show01(){
        //创建Properties结合对象
        Properties prop = new Properties();
        //使用setProperty往集合中添加数据
        prop.setProperty("michael","American");
        prop.setProperty("nathan", "Chinese");
        prop.setProperty("alex","Japanese");

        //使用stringPropertyNames把Properties集合中的键取出,存储到一个set集合中
        Set<String> set = prop.stringPropertyNames();

        //遍历set集合,取除Properties集合中的每一个健
        for(String key : set){
            //使用getProperty方法通过key获取value
            String value = prop.getProperty(key);
            System.out.println(key+"="+value);
        }
    }

2.Properties集合store方法

1).store方法
    可以使用Properties集合中的方法store,把集合中的临时数据,持久化写入到硬盘中存储
    void store(OutputStream out, String comments)
    void store(Writer writer, String comments)
    参数:
        OutputStream out:字节输出流,不能写入中文
        Writer writer:字符输出流,可以写中文
        String comments:注释,用来解释说明保存文件是做什么用的
            不能使用中文,会产生乱码,默认是Unicode编码
            一般使用""空字符串
    
        使用步骤:
        1.创建Properties集合对象,添加数据
        2.创建字节/字符输出流对象,构造方法中绑定要输出的目的地
        3.使用Properties集合中store方法,把集合中的临时数据,持久化写入到硬盘中存储
        4.释放资源
  • 代码示例
    private static void show01() throws IOException {
        //创建Properties结合对象
        Properties prop = new Properties();
        //使用setProperty往集合中添加数据
        prop.setProperty("michael","American");
        prop.setProperty("nathan", "Chinese");
        prop.setProperty("alex","Japanese");

        FileWriter fileWriter = new FileWriter("c.txt");
        //匿名对象使用完资源后,会自动释放资源
        //prop.store(new FileWriter("d.txt"),"test anonymous class");
        prop.store(fileWriter,"save data");

        fileWriter.close();
    }

备注:匿名对象使用完资源后,会自动释放资源

2).load方法
    可以使用Properties集合中的方法load,把硬盘中保存的文件(键值对),读取到集合中使用
    void load(InputStream inStream)
    void load(Reader reader)
    参数:
        InputStream inStream:字节输入流,不能读取含有中文的键值对
        Reader reader:字符输入流,能读取含有中文的键值对

    使用步骤:
        1.创建Properties集合对象
        2.使用Properties集合中load方法,读取保存键值对的文件
        3.使用集合
        4.释放资源
        
    注意:
        1.储存键值对的文件中,键与值默认的链接符号可以使用=,空格(其他符号)
        2.储存键值对的文件中,可以使用#进行注释,呗注释的键值对不会再被读取
        3.储存键值对的文件中,键与值默认都是字符串,不用再加引号
  • 代码示例
    private static void show01() throws IOException {
        //创建Properties结合对象
        Properties prop = new Properties();

        FileReader fileReader = new FileReader("c.txt");
        prop.load(fileReader);

        Set<String> strings = prop.stringPropertyNames();
        for (String key : strings) {
            String value = prop.getProperty(key);
            System.out.println(key+"="+value);
        }

        fileReader.close();
    }

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值