0
点赞
收藏
分享

微信扫一扫

文件操作——IO

目录

文件

  1. 文件定义:在计算机中,文件是一个广义的概念,它不仅包括平常在硬盘上以独立单位存储数据的文件,还包括文件夹(目录).在操作系统中,还会使用文件来描述一些硬件或者软件资源.

  2. 文件的结构:文件是按照层级结构进行组织的,也就说我们熟悉的树形结构.文件夹(目录)就是存储一类文件的特殊文件.如图是Windows上文件的树形结构组织.
    在这里插入图片描述

  3. 文件路径(Path):在操作系统中,通过"文件路径"的概念来描述一个具体文件/目录的位置.路径分为两种:绝对路径和相对路径

    1. 绝对路径:从文件的根节点开始到目标文件的路径.例如:C:\Program Files\Microsoft Office\Data
    2. 相对路径:从任意节点出法寻找到目标文件的路径.相对路径通常以".“或”. .“开头,其中.表示该层,”. ."表示上一层.
      在这里插入图片描述在这里插入图片描述
      例如我们在Delta所在路径下去寻找到root文件:C:\Program Files\Microsoft Office\Data\..\root

Java中的文件操作

File

Java中通过Java,io.File来对一个文件进行描述.

  1. File的构造方法
  2. File的相关方法
  3. File相关方法演示
  File file1 = new File("F:/leedcodeday/src/qrxedu");
  System.out.println(file1.getParent());
  System.out.println(file1.getName());
  System.out.println(file1.getPath());
  System.out.println(file1.getAbsolutePath());
  System.out.println(file1.getCanonicalPath());
  File file2 = new File("./qrxedu");
  System.out.println("=========================");
  System.out.println(file2.getParent()); // 父目录
  System.out.println(file2.getName());  // 本文件的名字
  System.out.println(file2.getPath()); // 本文件的相对路径
  System.out.println(file2.getAbsolutePath()); // 绝对路径
  System.out.println(file2.getCanonicalPath()); // 绝对路径简化版
  //分隔符可以是'\' 也可以是 '/',大多数操作系统都是用'/'分隔,'\'在编程时会发生字符转义之间的误会、
  //Windows由于历史遗留问题 导致输出的路径的分隔符 是'\',但兼容'/'
  System.out.println("=============================");
  File file3 = new File("./qiuruixiang.txt");
  System.out.println(file3.exists());
  file3.createNewFile();
  System.out.println(file3.exists());
  file3.delete();
  System.out.println("=================================");
  File file4 = new File("./aaa");
  file4.mkdir();
  System.out.println(file4.isDirectory());
  file4.delete();
  File file5 = new File("./aaa/abc/ccc/dde");
  file5.mkdirs();
  System.out.println(file5.isDirectory());
  //file5.delete();

在这里插入图片描述

文件内容的读写——数据流

字节流

字节流就是以字节的形式读写文件中的数据.文件中的数据是以字节存储的.这样的文件也被称为二进制文件.常见的二进制文件的后缀名有:.jar,.jpg,.mp4,.zip,.png等等.

  1. InputStream:InputStream是一个抽象类,还需要使用具体的实现类.InputStream的实现类有很多,不同的设备对应都一个InputStream的实现类.

  2. FileInputSteam:InputStream的一个实现类,用以从二进制文件中读取数据.当然也可以从文本文件中读取数据.

    FIleInputStream的使用演示:

    //将某一个实现Closeable接口的对象放入try中可以自动触发close()方法.
    //而所有流对象都实现了Closeable接口
    try(InputStream inputStream = new FileInputStream("./aa.txt")){
            while(true){
                int b = inputStream.read();
                if(b == -1){
                    break;
                }
                System.out.println(b);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    

    上述方法可以读取二进制文件的内容.但利用上述方法去读取文本文件比较麻烦.因为是按照字节去读取的,对于UTF-8编码中英文和中文的字符所占字节的不同,所以用这种方法读取文本文件很繁琐.
    我们可以利用Scanner去读文本文件.

     try(InputStream inputStream = new FileInputStream("./aa.txt")){
            try(Scanner scanner = new Scanner(inputStream,"utf-8")){
               while(scanner.hasNext()){
                   String s = scanner.next();
                   System.out.println(s);
               }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    
  3. OutputStream:与InputStream一样,OutputStream也是一个抽象类,使用的时候需要具体的实现类.

  4. FileOutputStream:OutputStream的一个实现类,以字节的形式向文件中写数据.
    FileOutputStream使用演示:

     //每次按照写操作 打开文件都会自动清空文件旧有的内容,然后按照起始位置写
        try(OutputStream outputStream = new FileOutputStream("./aa.txt")){
            byte[] buffer = {95,96,97,98,99};
            outputStream.write(buffer);
            outputStream.flush();
        }catch (IOException e) {
            e.printStackTrace();
        }
    

    和FileInputStream中一样,直接用FileOutputStream向文件中写字符型属于也比较麻烦.这里有可以OutputStreamWriter和PrintWriter来向文件中写字符型数据

       try(OutputStream outputStream = new FileOutputStream("./aa.txt")) {
            try(OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream,"utf-8")){
                try(PrintWriter printWriter = new PrintWriter(outputStreamWriter)){
                    printWriter.println("aaaa");
                    printWriter.print("哈哈");
                }
            }
    
        } catch (IOException e) {
            e.printStackTrace();
        }
    

字符流

在上述介绍字节流时,我们已经演示过用字节流去读些文本文件.但需要一些流之间的转换.在Java中我们有专门用来读写文本文件的类

  1. Reader:Reader是一个抽象类,在读文本文件时还需要使用FileReader()实现类.
  2. Writer:Writer是一个抽象类,在向文件中写字符型数据时还需要使用FileWriter()实现类.
  3. 使用演示:
try(Reader reader = new FileReader("./aa.txt")){
            char[] buffer= new char[1024];
            while(reader.read(buffer) != -1){
                System.out.println(buffer);
            }
        }catch (IOException e) {
            e.printStackTrace();
        }


try(Writer writer = new FileWriter("./aa.txt")){
            writer.write("hhh");
        } catch (IOException e) {
            e.printStackTrace();
        }

总结

本篇文章主要介绍了文件以及在Java中如何利用数据流去操作文件.虽然数据流对应的类的种类比较多,但使用各种数据流去读写文件的过程都是类似的.

举报

相关推荐

IO文件操作

文件IO操作

文件操作详解-IO

GoLang 文件IO操作

IO路-文件操作

【Java】文件操作和IO

【JavaEE】文件操作与IO

Python 文件 IO 操作详解

0 条评论