• 00087_File


    1、IO概述

      (1)要把数据持久化存储,就需要把内存中的数据存储到内存以外的其他持久化设备(硬盘、光盘、U盘等)上;

      (2)当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作;

      (3)当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作;

      (4)我们把这种输入和输出动作称为IO操作。

    2、File类的概述

      (1)打开API,搜索File类。阅读其描述:File文件和目录路径名的抽象表示形式;

      (2)即,Java中把文件或者目录(文件夹)都封装成File对象。也就是说如果我们要去操作硬盘上的文件,或者文件夹只要找到File这个类即可。

    3、File类静态的成员变量

      (1)pathSeparator

      与系统有关的路径分隔符,为了方便,它被表示为一个字符串;

      (2)separator

      与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。

      (3)案例代码

     1             /*
     2              *  java.io.File
     3              *    将操作系统中的,文件,目录(文件夹),路径,封装成File对象
     4              *    提供方法,操作系统中的内容
     5              *    File与系统无关的类
     6              *    文件 file
     7              *    目录 directory
     8              *    路径 path
     9              */
    10             public class FileDemo {
    11                 public static void main(String[] args) {
    12                     //File类静态成员变量
    13                     //与系统有关的路径分隔符
    14                     String separator = File.pathSeparator;
    15                     System.out.println(separator);// 是一个分号,目录的分割(window中环境变量配置各个路径用分号分割,表示一个完整的路径结束)  Linux中是冒号 :
    16                     
    17                     //与系统有关的默认名称分隔符
    18                     separator = File.separator;
    19                     System.out.println(separator);// 向右   目录名称分割  Linux / 
    20                 }
    21             }

    3、File类的构造方法

      

      通过构造方法创建File对象,代码演示:

     1 import java.io.File;
     2 
     3 public class FileDemo {
     4     public static void main(String[] args) {
     5         // File构造函数演示
     6         String pathName = "d:\Java\HelloWorld.java";
     7         File f1 = new File(pathName);
     8         System.out.println(f1);
     9 
    10         File f2 = new File("d:\Java", "HelloWorld.java");
    11         System.out.println(f2);
    12 
    13         // 将parent封装成file对象。
    14         File dir = new File("d:\Java");
    15         File f3 = new File(dir, "HelloWorld.java");
    16         System.out.println(f3);
    17     }
    18 
    19 }

    4、File类的获取

      (1)D:Java文件夹下有一个HelloWorld.java文件;

      

      (2)获取HelloWorld.java文件名称、文件路径(目录)等信息

     1 import java.io.File;
     2 
     3 public class FileMethodDemo {
     4     public static void main(String[] args) {
     5         // 创建文件对象
     6         File file = new File("d:\Java\HelloWorld.java");
     7         // 获取文件的绝对路径,即全路径
     8         String absPath = file.getAbsolutePath();
     9         // File中封装的路径是什么获取到的就是什么。
    10         String path = file.getPath();
    11         // 获取文件名称
    12         String filename = file.getName();
    13         // 获取文件大小
    14         long size = file.length();
    15 
    16         System.out.println("absPath=" + absPath);
    17         System.out.println("path=" + path);
    18         System.out.println("filename=" + filename);
    19         System.out.println("size=" + size);
    20     }
    21 }

      运行结果:

      

     5、文件和文件夹的创建删除等

       (1)创建

    1 public static void main(String[] args) throws IOException {
    2         // 对文件或者文件加进行操作。
    3         File file = new File("d:\Java\file.txt");
    4         // 创建文件,如果文件不存在,创建 true 如果文件存在,则不创建 false。 如果路径错误,IOException。
    5         boolean b1 = file.createNewFile();
    6         System.out.println("b1=" + b1);
    7     }

      (2)删除

    1 // 对文件或者文件加进行操作。
    2 File file = new File("d:\Java\file.txt");
    3 // 删除文件操作,注意:不去回收站,慎用。
    4 boolean b2 = file.delete();
    5 //如果file.txt存在,则输出true,不存在输出false。
    6 System.out.println("b2=" + b2);    

      (3)判断文件是否存在

    1 // 对文件或者文件加进行操作。
    2 File file = new File("d:\Java\file.txt");
    3 // 需要判断文件是否存在,存在输出true,不存在输出false
    4 boolean b3 = file.exists();
    5 System.out.println("b3=" + b3);

      (4)对目录操作:创建

    1 File dir = new File("d:\abc");
    2 // mkdir()创建单个目录。//dir.mkdirs();创建多级目录
    3 boolean b4 = dir.mkdir();
    4 System.out.println("b4=" + b4);

      (5)对目录操作:删除

    1 //删除目录时,如果目录中有内容,无法直接删除。
    2 boolean b5 = dir.delete();
    3 //只有将目录中的内容都删除后,保证该目录为空。这时这个目录才可以删除。
    4 System.out.println("b5=" + b5);

      (6)判断是文件还是目录

    1 File f = new File("d:\Java\HelloWorld.java");// 要判断是否是文件还是目录,必须先判断存在。
    2 f.mkdir();//f.createNewFile();
    3 System.out.println(f.isFile());
    4 System.out.println(f.isDirectory());

    6、listFiles()方法

      获取一个目录中的所有文件和文件夹。

      在获取指定目录下的文件或者文件夹时必须满足下面两个条件:

      (1)指定的目录必须是存在的;

      (2)指定的必须是目录。否则容易引发返回数组为null,出现NullPointerException。

     1 public class FileMethodDemo3 {
     2     public static void main(String[] args) {
     3         File dir = new File("D:\Java");
     4         // 获取的是目录下的当前的文件以及文件夹的名称。
     5         String[] names = dir.list();
     6         for (String name : names) {
     7             System.out.println(name);
     8         }
     9         // 获取目录下当前文件以及文件对象,只要拿到了文件对象,那么就可以获取其中想要的信息
    10         File[] files = dir.listFiles();
    11         for (File file : files) {
    12             System.out.println(file);
    13         }
    14     }
    15 }

    7、文件过滤器

      (1)通过listFiles()方法,我们可以获取到一个目录下的所有文件和文件夹,但能不能对其进行过滤呢?比如我们只想要一个目录下的指定扩展名的文件,或者包含某些关键字的文件夹呢?

      (2)我们是可以先把一个目录下的所有文件和文件夹获取到,并遍历当前获取到所有内容,遍历过程中在进行筛选,但是这个动作有点麻烦,Java给我们提供相应的功能来解决这个问题;

      (3)FilenameFilter

      查阅File类的API,在查阅时发现File类中重载的listFiles方法,并且接受指定的过滤器。
      自定类继承FilenameFilter过滤器接口:

    1 import java.io.File;
    2 import java.io.FilenameFilter;
    3 
    4 //定义类实现文件名称FilenameFilter过滤器
    5 class MyFileFilter implements FilenameFilter {
    6     public boolean accept(File dir, String name) {
    7         return name.endsWith(".java");
    8     }
    9 }

      测试类:

     1 import java.io.File;
     2 
     3 public class FileDemo2 {
     4     public static void main(String[] args) {
     5         // 获取扩展名为.java所有文件
     6         // 创建File对象
     7         File file = new File("D:\Java");
     8         // 获取指定扩展名的文件,由于要对所有文件进行扩展名筛选,因此调用方法需要传递过滤器
     9         File[] files = file.listFiles(new MyFileFilter());
    10         // 遍历获取到的所有符合条件的文件
    11         for (File f : files) {
    12             System.out.println(f);
    13         }
    14     }
    15 }

      (4)FileFilter过滤器和FilenameFilter的区别

      FilenameFilter过滤器中的accept方法接受两个参数,一个当前文件或文件夹所在的路径,一个是当前文件或文件夹对象的名称;

      FileFilter 过滤器中的accept方法接受一个参数,这个参数就当前文件或文件夹对象;

      当我们需要过滤文件名称时就可以使用FilenameFilter这个过滤器,当我们想对当前文件或文件夹进行过滤,就可以使用FileFilter ,比如需要当前目录下的所有文件夹,就可以使用FileFilter 过滤器。

      自定义类继承FileFilter过滤器接口:

    1 import java.io.File;
    2 import java.io.FileFilter;
    3 
    4 //文件过滤器
    5 class FileFileterByDir implements FileFilter {
    6     public boolean accept(File pathname) {
    7         return pathname.isDirectory();
    8     }
    9 }

      测试类:

     1 import java.io.File;
     2 
     3 public class FileDemo3 {
     4     public static void main(String[] args) {
     5         // 获取扩展名为.java所有文件
     6         // 创建File对象
     7         File file = new File("D:\Java");
     8         // 获取指定目录下的文件夹
     9         File[] files = file.listFiles(new FileFileterByDir());
    10         // 遍历获取到的所有符合条件的文件
    11         for (File f : files) {
    12             System.out.println(f);
    13         }
    14     }
    15 }

      

  • 相关阅读:
    51CTO资料索引 很不错
    extern和extern“c"作用详解 以及C和C++混合编程 在文章:3.深层揭密extern "C" 部分可以看到 .
    用VC++实现图像检索技术(转)
    OpenSceneGraph FAQ
    NeHe OpenGL教程 02 渲染第一个多边形
    C++经验谈(摘抄)
    利用条件编译实现工程定制版本的自动输出
    没有文件扩展".js"的脚本引擎 解决办法
    OpenGL FAQ
    NeHe OpenGL教程 01 创建OpenGL窗口
  • 原文地址:https://www.cnblogs.com/gzdlh/p/8095624.html
Copyright © 2020-2023  润新知