美文网首页
Java IO 第1篇:带你认识 File 类

Java IO 第1篇:带你认识 File 类

作者: 追梦人_奋斗青年 | 来源:发表于2020-04-12 18:47 被阅读0次

带你认识 File 类

一、初识 Java IO

Java IO 操作主要指的是使用Java进行输入、输出操作,Java 中的所有 IO 操作类都存放在 java.io 包中,在开发时需要导入此包。

在 Java 程序中,对于数据的输入、输出操作以流(stream)的方式进行,Java 提供了种类丰富的“流”类,java.io 包中重要的类有5个:File、InputStream、OutputStream、Reader、Writer。用来处理不同种类的数据,在程序开发过程中通过标准的代码进出数据的输入或输出操作。

输入输出流示意图.png

以程序为中心,从文件或者网络上读取到程序中就用输入流,从程序中写出到文件或者网络上就用输出流。

二、文件操作 File 类

1、File 类的基本介绍

File 类是文件和目录路径名的抽象表示,一个 File 对象的建立不等于创建了一个文件或者目录,而是指与文件或者目录建立了联系,通过 File 类的对象可以访问文件的属性、创建空文件和目录、以及删除文件和目录等操作。

2、File 类的两个常量和路径的三种表示形式

File.pathSeparator 表示系统默认路径分隔符,Windows 中使用“;”表示,Linux中使用“:”表示;File.separator 表示系统默认名称分隔符,Windows 中使用“\”表示,Linux中使用“/”表示。

Windows 中文件路径的表示方式用“\”来表示,在 Java 中需要通过转移字符“\”来表示;Linux 中文件路径表示方式用“/”来表示,当在程序里动态生成文件路径的时候可以使用系统默认名称分隔符 File.separator 来表示。

在开发中推荐大家使用“”/”来做目录名称的分隔符,不管是什么系统都可以使用,比如:
“D:/Download/image/tomcat.png”。

@Test
  public void test2()
    // 路径分隔符 windows(;) linux(:)
    System.out.println(File.pathSeparator); 
    // 名称分隔符 windows(\) linux(/)
    System.out.println(File.separator); 
    // 路径的几种表示形式
    // windows 的方式
    String path = "D:\\Download\\image\\tomcat.png"; 
    // 动态生成推荐使用这种方式
    path = "D:" + File.separator + "Download" + File.separator + "image" + File.separator + "tomcat.png"; 
    // 推荐使用的方式,什么平台都能用
    path = "D:/Download/image/tomcat.png"; 
    System.out.println(path);
  }

3、使用 File 类进行文件的判断操作

我们在操作文件的时候,经常会用到文件的判断操作,常用的判断操作有:文件或目录是否存在、是否是文件、是否是文件夹、获取文件的长度等等。

@Test
  public void test3() {
    String path = "D:/Download/image/tomcat.png";
    File file = new File(path);  // 建立与文件的联系
    System.out.println("文件是否存在:" + file.exists());
    System.out.println("文件是否是文件:" + file.isFile());
    System.out.println("文件是否是文件夹:" + file.isDirectory());
    // 返回字节数,如果是文件夹则读不出来长度
    System.out.println("文件的长度是:" + file.length());
    System.out.println("文件是否可写:" + file.canWrite());
    System.out.println("文件是否可读:" + file.canRead());
  }

4、使用 File 类进行文件的创建与删除

文件的创建操作用 createNewFile() 方法,文件不存在则创建新文件,存在则返回 false;文件的删除用 delete() 方法,文件不存在返回 false;在开发中,一般创建和删除文件时都会判断一下文件是否存在。

@Test
  public void test4() throws IOException, InterruptedException {
    String path = "D:/Download/image/tomcat.jpg";
    File file = new File(path); // 建立文件的联系
    if (!file.exists()) {
      boolean flag = file.createNewFile(); // 文件不存在则创建新文件,存在则返回false
      System.out.println(flag ? "文件创建成功" : "文件创建失败");
    }
    if (file.exists()) {
      boolean flag = file.delete(); // 文件不存在返回false
      System.out.println(flag ? "文件删除成功" : "文件删除失败");
    }
  }

5、使用 File 类进行目录的操作

目录的创建操作方法有两个,一是 mkdir() 方法,只有父目录存在的情况下才能创建成功;二是 mkdirs() 方法,如果父目录不存在则可把父目录一起创建出来。

目录的删除依然用 delete() 方法,如果目录下面有内容则返回 false;在开发中,一般使用 mkdirs() 方法创建目录。

@Test
  public void test5() throws IOException, InterruptedException {
    // 本地存在pic目录,但是没有photo和2020目录
    String path = "D:/Download/image/pic/photo/2020";
    File file = new File(path);
    System.out.println(file.mkdir()); // false
    System.out.println(file.mkdirs()); // true
  }

6、使用 File 类列出指定目录下的文件

在日常开发中,列出目录下的文件这个功能经常会用到,用 File[] listFiles() 方法可以列出目录下的文件或者文件夹,返回的是文件数组。通过循环遍历返回的文件数组就可以获取到每一个文件或者文件夹。listFiles() 方法使用的比较多。

还有一个 String[] list() 方法,它可以列出目录下的文件或者文件夹的名称,这个在开发中不常用。

@Test
  public void test6() {
    String path = "D:/Download/txt";
    File file = new File(path);
    if (file.exists()) {
      // 列出指定目录下的文件或目录的名称字符串数组,不常用
      String[] fileNmaes = file.list();
      System.out.println(Arrays.deepToString(fileNmaes));
      // 列出指定目录下的文件或目录的File对象数组,常用方法
      File[] files = file.listFiles();
      if (files != null) {
        for (File f : files) {
          System.out.println(f);
        }
      }
    }
  }

程序运行输出结果:
[123.txt, txt1]
D:\Download\txt\123.txt
D:\Download\txt\txt1

7、综合案例:列出指定目录下的全部内容

列出指定目录下的全部内容和列出指定目录下的文件,区别在于:指定目录下可能存在文件,也可能存在文件夹,子文件夹里也可能存在文件和文件夹。因此需要使用递归的方法完成。

开发思路:首先判断指定目录是否是目录,如果是目录的话,通过 listFiles() 方法获取该目录下的文件或者文件夹,循环取出 File 对象,调用递归方法完成文件路径的输出。

递归方法:递归方法必须要有结束的条件,同时要求递归的函数体内要调用自己。


@Test
  public void test7() {
    String path = "D:/Download/txt";
    File file = new File(path);
    print(file);
  }

  // 递归方法输出指定目录下的文件内容
  public static void print(File file) {
    if (file != null && file.exists()) {
      if (file.isDirectory()) {
        // 如果是目录的话,首先输出路径,然后继续获取该目录下的内容
        System.out.println(file);
        File[] files = file.listFiles();
        if (files != null) { // for循环前判空是个良好的开发习惯
          for (File f : files) {
            print(f); // 递归的函数体内要调用自己
          }
        }
      } else {// 直接打印文件的绝对路径,也就是递归结束的条件
        System.out.println(file);
      }
    }
  }

File 类是 Java IO 操作最基础的类,也是唯一的与文件产生关系的类,在所有 IO 操作之前都需要通过 File 类创建文件对象,从而与要操作的文件路径建立联系,之后才能通过选择具体的 IO 流进行文件的操作。

下一篇文章会给大家介绍 IO 流的分类与使用,敬请期待......

相关文章

  • Java IO 第1篇:带你认识 File 类

    带你认识 File 类 一、初识 Java IO Java IO 操作主要指的是使用Java进行输入、输出操作,J...

  • Chapter 9 . Java IO

    阅读原文 Chapter 9 . Java IO 9.1 IO---File 类 java.io.File类:文件...

  • java-IO输入输出流

    一.java.io.File类 java.io.File类用于表示文件/目录 File只用于表示文件的信息(名称,...

  • java io

    参考Java IO学习笔记(一):File类Java IO学习笔记(二):RandomAccessFile类Jav...

  • Java篇-IO处理

    一 : 文件 凡是与输入输出相关的类,接口等定义在java.io包下File类->java.io.File.Fil...

  • Java入门系列-22-IO流

    File类的使用 Java程序如何访问文件?通过 java.io.File 类 使用File类需要先创建文件对象 ...

  • java基础系列09--IO 流(1)

    IO 流 File 类 File更应该叫做一个路径 此类位于java.io.File File类的重命名和删除功...

  • Java I/O二.File常用方法

    本文简单罗列 File类构造方法 File类常用方法 在Java语言的java.io包中,由File类提供了描述文...

  • Java-File类

    说到Java里的IO流,我们首先应当了解File类,此File类为java.io包下的类,用来操作文件和目录,但是...

  • Java-I/O学习(4)

    Java-I/O学习(4) File Java IO 的File类可以帮助你访问底层的文件系统,使用File类你可...

网友评论

      本文标题:Java IO 第1篇:带你认识 File 类

      本文链接:https://www.haomeiwen.com/subject/lzzvmhtx.html