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. 1 // 对文件或者文件加进行操作。
  2. 2 File file = new File("d:\\Java\\file.txt");
  3. 3 // 删除文件操作,注意:不去回收站,慎用。
  4. 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. }

  

00087_File的更多相关文章

随机推荐

  1. Copying GC (Part two :Multi Space Copying GC)

    目录 近似深度优先搜索方法 Cheney的GC复制算法 前提 执行结果 多空间复制算法 multi_space_copying()函数 mark_or_copy() copy() 执行过程 优缺点 近 ...

  2. blkid---对系统块设备信息查询

    在Linux下可以使用blkid命令对查询设备上所采用文件系统类型进行查询.blkid主要用来对系统的块设备(包括交换分区)所使用的文件系统类型.LABEL.UUID等信息进行查询.要使用这个命令必须 ...

  3. Android学习总结(1)——好的 Android 开发习惯

    Android编码规范 java代码中不出现中文,最多注释中可以出现中文: 局部变量命名.静态成员变量命名:只能包含字母,单词首字母出第一个都为大写,其他字母都为小写: 常量命名:只能包含字母和 ,字 ...

  4. [Python] Finding the most common elements in an iterable

    >>> import collections >>> # Tally occurrences of words in a list >>> cnt ...

  5. (七十一)关于UITableView退出崩溃的问题和滚动究竟部的方法

    [TableView退出崩溃的问题] 近期在使用TableView时偶然发如今TableView中数据较多时,假设在滚动过程中退出TableView到上一界面.会引起程序的崩溃.经过网上查阅和思考我发 ...

  6. PipeCAD之管道标准库PipeStd

    PipeCAD之管道标准库PipeStd eryar@163.com Key Words. PipeCAD, PipeStd, 管道设计软件,管件库 1. Introduction 前不久,两位老友徐 ...

  7. Array与ArrayList

    代码图理解复杂代码 类图 1.抽象动物类Animal using System; using System.Collections.Generic; using System.Linq; using ...

  8. vue -- config.js 配置跨域文件

    1.在使用vue开发的时候经常要涉及到跨域的问题,其实在vue cli中是有我们设置跨域请求的文件的. 2.当跨域无法请求的时候我们可以修改工程下config文件夹下的index.js中的dev -- ...

  9. 56.lambda表达式与绑定以及伪函数和绑定

    #include <iostream> #include <functional> using namespace std; using namespace std::plac ...

  10. POJ 2394 Dijkstra

    题意: 思路: 裸的Dijkstra 爆敲一发模板 //By SiriusRen #include <queue> #include <cstdio> #include < ...