【JavaSE】文件读写

目录

一、文件

1、文件的概念

1.广义

2.狭义

二、路径

1、绝对路径

2、相对路径

1.进入下一级./

2.回退上一级../

三、Java里的文件基本操作----File类

1、说明

2、File类的基本操作

1.基本方法

​2.创建与删除文件

3.创建目录

4.文件的重命名

四、文件的读写操作

1、数据流

2、InputStream与OutputStream(字节流读写文件)

1.InputStream抽象类进行字节流读取操作

 2.OutputStream抽象类进行字节流写入

 3、Reader与Writer(字符流读写)

1.Reader抽象类进行字符流读取

2.Writer抽象类进行字符流写入

4、Scanner与PrintWrite(文本文件的读写)

1.Scanner

 2.PrintWrite

 5、关闭资源



 

一、文件

1、文件的概念

1.广义

把操作系统管理的软硬件资源都抽象为文件

2.狭义

狭义上的文件就是存储在硬盘上的数据

在后续的讨论中我们所说的文件是狭义上的文件,在操作系统里文件的目录结构是一个n叉树

二、路径

1、绝对路径

绝对路径是指文件在硬盘上真正存在的路径。类似于盘符:/路径这种就是绝对路径,在后续使用更推荐相对路径,因为每台电脑上每个文件的位置不一定相同,使用绝对路径,在换一台电脑后不一定能找到目标文件

2、相对路径

相对路径则是以一个基准路径为起点描述文化位置,,通过./进入下一级与../回退为上一级目录 

1.进入下一级./

如果此时基准路径是D盘要找到D盘QQ里的QQ.exe则相对路径就是:./QQ/QQ.exe

2.回退上一级../

如果此时基准路径是在D盘里的YJWJ,那么找到QQ.exe相对路径就是../QQ/QQ.exe

三、Java里的文件基本操作----File类

1、说明

文件操作是操作系统提供的一些API,每个系统的API不同,在Java里JVM中把不同系统的文件操作进行了封装,所有的系统下都可以使用JavaAPI操作文件

2、File类的基本操作

1.基本方法

获取上一级路径:getParent()

获取文件名:getName()

获取文件路径:getPath()

 

获取文件的绝对路径:getAbsolutePath()

判断文件是否存在:exists()

判断是否是目录:isDirectory()

判断是否是文件:isFile()

 2.创建与删除文件

1.实例化File对象,给构造方法传入文件路径

2.调用createNewFile()方法创建文件

 

3.调用delete()方法删除文件 

还有另一个在进程退出时删除文件的方法:deleteOnExit() 

3.创建目录

 创建单级目录:

创建多级目录:

 

 

4.文件的重命名

1.创建新的File实例,构造方法传入新名字

 

2.待改名的File实例调用renameTo方法

 

 

四、文件的读写操作

1、数据流

将读写操作的数据比作水流,流分为字节流与字符流,字节流以字节为基本单位适用于二进制,字符流以字符为基本单位适用于文本文件,Java标准库基于流的操作提供了一些类用于读写文件

2、InputStream与OutputStream(字节流读写文件)

1.InputStream抽象类进行字节流读取操作

1.构造实例----打开文件

2.读取----read

3.释放资源 ---关闭文件

代码:

public static void useInputStream() throws IOException {
        //1.构造实例,操作效果类似于打开文件
        InputStream inputStream = new FileInputStream("文件路径");

        //2.读取操作
        int n = 0;
        while(n != -1){
            n = inputStream.read();        //无参read 返回值为int当返回-1时,文件读完
            System.out.println((char)n);
        }

        byte[] content = new byte[1024];
        inputStream.read(content);        //参数为byte[]  将文件内容读取到数组里

        inputStream.read(content,0,100); //将len长度的内容读取到数组里off位置开始

        //3.释放资源类似于关闭文化
        inputStream.close();
    }

 2.OutputStream抽象类进行字节流写入

1.构造实例,打开文件

2.写文件

 

3.释放资源,关闭文件

 

代码:

public static void useOutputStream(String path) throws IOException {
        //1.构造实例,打开文件
        OutputStream outputStream = new FileOutputStream(path);

        //2.写文件
        outputStream.write(97);                 //参数为int  写入一个字节
        outputStream.write(new byte[]{98,99,100}); //参数为数组,将数组写入文件
        outputStream.write(new byte[]{101,102,103},0,2);//将数组从off开始写入len个长度

        //3.释放资源,关闭文件
        outputStream.close();
    }

 3、Reader与Writer(字符流读写)

1.Reader抽象类进行字符流读取

1.构造实例 打开文件

 

2.读取文件

3.释放资源 关闭文件

 

代码:

 public static void useReader(String path) throws IOException {
        //1.构造实例,打开文件
        Reader reader = new FileReader(path);

        //2.读取文件
        int n = 0;
        while(n != -1){
            n = reader.read();                           //read方法与前面InputStream读取类似
            System.out.println((char)n);
        }

        //3.释放资源,关闭文件
        reader.close();
    }

2.Writer抽象类进行字符流写入

1.构造实例 打开文件

 

2.写入

3.释放资源 关闭文件

 

代码:

 public static void useWriter(String path) throws IOException {
        //1.构造实例 打开文件
        Writer writer = new FileWriter(path);

        //2.写入文件
        writer.write("参数为字符串写入");
        writer.write(98); //参数为int类型写入
        writer.write("字符串写入从off来len长度",0,11);
        writer.write(new char[]{'a','b','c'});  //参数为字符数组
        writer.write(new char[]{'a','b','c'},0,2);

        //3.释放资源 关闭文件
        writer.close();
    }

4、Scanner与PrintWrite(文本文件的读写)

1.Scanner

使用:

 

代码:

 public static void useScanner(String path) throws IOException {
        //1.创建InputStream实例
        InputStream inputStream = new FileInputStream(path);

        //2.创建Scanner实例传入InputStream实例
        Scanner scanner = new Scanner(inputStream);

        //3.读取我
        while(scanner.hasNext()){
            System.out.println(scanner.next());
        }

        //4.释放资源
        inputStream.close();
    }

 2.PrintWrite

 

使用:

代码:

public static void usePrintWrite(String path) throws IOException {
        //1.创建OutputStream实例
        OutputStream outputStream = new FileOutputStream(path);

        //2.创建PrintWrite实例 传入OutputStream实例
        PrintWriter printWriter = new PrintWriter(outputStream);

        //3.开始写入
        printWriter.println("写入");
        printWriter.print(222);
        printWriter.printf("年龄 = %d",100);

        //4.释放资源
        printWriter.close();
        outputStream.close();
    }

 5、关闭资源

一定要调用close关闭资源,从PCB的文件描述符表中删除,文件描述符表本质有长度上限,一旦达到上限就会导致文件打开失败,文件泄露,释放资源最好使用try with resource,多个资源使用;隔开 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

1886i

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

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

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

打赏作者

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

抵扣说明:

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

余额充值