java的IO流

(一) java.io.File类

1.1基础知识

  1. 此类是文件和目录的抽象表示形式。
  2. java把电脑中的文件和文件夹(目录)封装为了一个File类,我们可以使用File类对文件和文件夹进行操作。
  3. 我们可以使用File类的方法创建一个文件或文件夹,删除/获取/判断是否存在/对文件进行遍历/获取文件大小。
  4. File类是一个与系统无关的类,任何操作系统都可以使用类中 的方法。
  5. 重点记住三个单词:file:文件;directory:文件夹/目录;path:路径。

1.2File类中静态成员变量

package JavaIO;

import java.io.File;

public class Demo1File {
    public static void main(String[] args) {
        String pathSeparator= File.pathSeparator;
        System.out.println(pathSeparator);//路径分隔符,windows是分号,Linux是冒号

        String separator=File.separator;
        System.out.println(separator);//文件名称分隔符,windows是反斜杠\,Linux是正斜杠/
    }
}

  1. 操作路径一般不能写死了,因为不同的操作系统用到分隔符不同。
  2. C:\develop\a\a.txt windows版本。
  3. C:/develop/a/a.txt Linux版本。
  4. 应该这样写:C:“+File.separator+”develop“+File.separator+”a“+File.separator+”a.txt 。

1.3绝对路径与相对路径

  1. 绝对路径:是一个完整的路径,以盘符开始的路径
  2. 相对路径:是一个简化的路径,相对指的是当前项目的根目录。(C:\User\IdeaProject\Test),如果使用当前项目根目录。C:\User\IdeaProject\Test\123.txt,路径可以简化书写123.txt(可省略项目根目录)。
  3. 注意:路径不区分大小写,路径名中的分隔符Windows中是反斜杠,反斜杠表示转义字符,两个反斜杠表示一个普通的反斜杠。

1.4File类的构造方法(只列了常用的一种)

  1. **File file=new File(String pathname);**通过将给定文件名字符串转换成抽象路径名来创建一个新的File实例。
  2. 路径可以以文件结尾,也可以是文件夹。
  3. 路径可以是绝对路径也可以是相对路径。
  4. 路径可以真实存在,也可以不存在。
  5. 创建File对象只是将路径字符串封装给了File对象,并不关心路径真假情况。

    public Demo1File() {
        File file = new File("D:\\Test_Mario\\Test\\a.txt");
        System.out.println(file);
    }

(二)IO概述

2.1什么是IO流

  1. 我们将数据的传输看作一种数据的流动,按照流动的方向,以内存为基准,分为输入input和输出output,即流向内存是输入流,反之是输出流。
  2. Java中IO操作主要是指是应用Java.io包的内容,进行输入输出操作,输入也叫读取数据,输出叫写出数据。
  3. 硬盘存储:永久性的
  4. 内存存储:临时性的
  5. 1.将硬盘中数据读到内存中属于读取(输入)2.将内存中的数据写入硬盘中保存(写入
输入流输出流
字节输入流:InputStream字节输出流OutputStream
字符输入流:Reader字符输出流:Writer

2.2一切皆为字节

  1. 一切文件数据(文档,图片,视频等)在存储时,都是以二进制数字形式保存的,都是一个个字节,传输时一样如此,所以字节流可以传输任意文件数据。

2.3字节流 输出流OutputStream(最顶层的类)

  1. 由于OutputStream类是由abstract修饰的抽象类,所以无法直接new对象,只能继承其子类(多个)

2.4字节输入流 写数据到文件

  1. 利用子类FileoutputStrame类将数据从内存写入硬盘
  2. 写入数据原理:Java程序–>JVM(java虚拟机)–>OS(操纵系统)–>OS调用写数据方法–>把数据写入文件。
  3. 字节输出流的使用步骤:1.创建一个FileOutputStream对象,构造方法中传递数据写入数据目的地(文件)2.调用对象的writer方法将数据写入到文件3.释放资源(流使用会占用一定的字节,使用完要把内存清空)
package JavaIO;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class OutputStreameDemo  {
    public static void main(String[] args) throws IOException {
        //1.创建对象并传入目的地
        FileOutputStream fos =new FileOutputStream("D:\\Test_Mario\\Test\\a.txt");
        //写入
        fos.write(99);
        //3.释放资源
        fos.close();

    }

}

(三)属性集Properties

3.1概述

  1. Properties类表示了一个持久的属性集,Properties可保存在流中或从流中加载。
  2. Properties集合是一个唯一和IO流相结合的集合。
  3. 可以使用Properties集合中的store方法将集合中临时数据持久化的写入硬盘中存储。
  4. 可以使用Properties集合中的Load方法,把硬盘中保存的文件(键值对)读取到集合中使用。
  5. 属性列表中每个键及其对应的值都是一个字符串:Properties集合是一个双列集合,key和value都是字符串。

3.2使用Properties集合存数据,并去除数据

package JavaIO;

import java.util.Properties;
import java.util.Set;

public class DemoProperties {
    public static void main(String[] args) {
        show01();
    }
//使用Properties集合存储数据,遍历取出Properties集合中数据。
    private static void show01() {
        //创建对象
        Properties properties = new Properties();
        //使用setProperties方法往集合中加数据
        properties.setProperty("赵丽颖1","168");
        properties.setProperty("赵丽颖2","169");
        properties.setProperty("赵丽颖3","170");

        //使用stringPropertyNames()将Properties中键取出,存储到string集合中
        Set<String> strings = properties.stringPropertyNames();
        //遍历string集合,
        for (String key:strings){
            String value=properties.getProperty(key);
            System.out.println(key+"="+value);
        }

    }
}

3.3Store()方法,两种参数

  1. 用Store()方法将Properties集合中临时数据持久化写到硬盘中存储。
  2. store(OutputStream out, String comments):字节输出流,不能写入中文。
  3. store(Writer writer, String comments):字符输出流,可以中文。
  4. comments用来解释说明保存的文件是做什么用的。不可用中文
  5. 使用步骤:1.创建Properties对象,添加数据2.创建字节输出流./字符输出流对象,构造方法中绑定要输出的目的地3.使用Proerties集合中的Store()将集合中临时数据持久化写到硬盘中存储。4.释放资源(关闭流)。
  6. 创建字符流:
package JavaIO;

import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;
import java.util.Set;

public class DemoProperties {
    public static void main(String[] args) throws IOException {
        show01();

    }
    private static void show01() throws IOException {
        //1创建对象,添加数据
        Properties properties = new Properties();
        properties.setProperty("赵丽颖1","168");
        properties.setProperty("赵丽颖2","169");
        properties.setProperty("赵丽颖3","170");

        //2字符输出流对象,构造方法中绑定要输出的目的地
        FileWriter fileWriter = new FileWriter("D:\\Test_Mario\\Test\\a.txt");
        //3使用Proerties集合中的Store()将集合中临时数据持久化写到硬盘中存储
        properties.store(fileWriter,"save data");
        //关闭流
        fileWriter.close();


    }
}

在这里插入图片描述

  1. 创建字节流

3.4Load()

  1. 将硬盘中数据以键值对读到集合中使用
  2. load(InputStream inStream) 字节输入流,不能读含有中文的键值对
  3. load(Reader reader) 字符输入流,能读取中文键值对
  4. 使用步骤:1.创建Properties对象2.使用对象中load方法读取键值对文件3.遍历properties集合看有没有读入
  5. 注意:1.存储键值对的文件中,键与值连接符号可以使用=,空格(其他)2.存储键值对文件中可以使用#进行注释,被注释的键值对不会被读取
    3.键值对文档中,键值默认是字符串,不用加引号
package JavaIO;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;
import java.util.Set;

public class LoadProperties {
    public static void main(String[] args) throws IOException {
        show2();

    }
    public static void show2() throws IOException {
        //1创建对象
        Properties properties = new Properties();
        //2.使用load()读取,方法参数需要传入一个流
        properties.load(new FileReader("D:\\Test_Mario\\Test\\a.txt"));
        //properties.load(new FileInputStream("D:\\Test_Mario\\Test\\a.txt"));
        //3.遍历集合
        Set<String> strings = properties.stringPropertyNames();
        for (String key:strings){
           String value= properties.getProperty(key);
            System.out.println(key+"="+value);

        }
    }
}

(四)缓冲流BufferedInputStream

4.1概述

  • 缓冲流:也叫高效流, 能够高校读取的缓冲流,相当于对基础的四种流对象FileXXXX(字节输入\输出流,字符输入\输出流)进行加强,所以也是四个流,都是在基础的流对象上创建而来
  • 字节缓冲流: BufferedInputStream,BufferedOutputStream,
  • 字符缓冲流: BufferedReader,BufferedWriter
  • 缓冲流的基本原理:在创建流对象的时候,会创建一个内置默认大小的缓冲区数组,通过缓冲区读写,减少系统IO次数,从而提高读写效率。
  • 就像快递小哥送快递,送5个快递,基本的流要一个个送,从快递站取一个送一次,共重复5次。而缓冲流给基本字节输入流增加一个缓冲区(数组),将所有快递一次性读完放数组中,然后一起送。
  • BufferedInputStream(new FileInputStream);

4.2字节缓冲流

  1. BufferedInputStream
  2. BufferedOutputStream 继承 OutputStream,字节缓冲输出流,继承父类的共性成员方法。
package JavaIO;
//使用方法:1.创建FileOutputStream对象,构造方法中你绑定要输出的目的地
// 2.创建BufferedOutputStream对象,构造方法中传递FileOutputStream对象
//3.使用BufferedOutputStream对象的方法将数据写入到内部缓冲区
//4.使用BufferedOutputStream对象中flush方法,将缓冲区数据刷新到文件中
//5.释放资源(会先调用flush方法刷新数据,第四部可以省略)

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class DemoBufferedOpS {
    public static void main(String[] args) throws IOException {
       // 1.创建FileOutputStream对象,构造方法中你绑定要输出的目的地
        FileOutputStream fileOutputStream = new FileOutputStream("E:\\Idea-project\\Test1\\src\\JavaIO\\b.txt");
       // 2.创建BufferedOutputStream对象,构造方法中传递FileOutputStream对象
        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
        bufferedOutputStream.write("将数据写入内部缓冲区".getBytes());
        bufferedOutputStream.flush();

    }
}

  1. 注:未写这句bufferedOutputStream.flush();的时候只是创建了文件,但是由于数据在缓冲区,b.txt中并无东西。

4.3 close和flush方法区别

  1. close():先刷新缓冲区,将缓冲区数据刷新到文件中然后通知系统释放资源,流对象不可在被使用
  2. flush():刷新缓冲区,将缓冲区数据刷新到文件中,流对象可以继续使用

(五)转换流

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泰勒今天想展开

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值