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)案例代码
- /*
- * java.io.File
- * 将操作系统中的,文件,目录(文件夹),路径,封装成File对象
- * 提供方法,操作系统中的内容
- * File与系统无关的类
- * 文件 file
- * 目录 directory
- * 路径 path
- */
- public class FileDemo {
- public static void main(String[] args) {
- //File类静态成员变量
- //与系统有关的路径分隔符
- String separator = File.pathSeparator;
- System.out.println(separator);// 是一个分号,目录的分割(window中环境变量配置各个路径用分号分割,表示一个完整的路径结束) Linux中是冒号 :
- //与系统有关的默认名称分隔符
- separator = File.separator;
- System.out.println(separator);// 向右 \ 目录名称分割 Linux /
- }
- }
3、File类的构造方法
通过构造方法创建File对象,代码演示:
- import java.io.File;
- public class FileDemo {
- public static void main(String[] args) {
- // File构造函数演示
- String pathName = "d:\\Java\\HelloWorld.java";
- File f1 = new File(pathName);
- System.out.println(f1);
- File f2 = new File("d:\\Java", "HelloWorld.java");
- System.out.println(f2);
- // 将parent封装成file对象。
- File dir = new File("d:\\Java");
- File f3 = new File(dir, "HelloWorld.java");
- System.out.println(f3);
- }
- }
4、File类的获取
(1)D:\Java文件夹下有一个HelloWorld.java文件;
(2)获取HelloWorld.java文件名称、文件路径(目录)等信息
- import java.io.File;
- public class FileMethodDemo {
- public static void main(String[] args) {
- // 创建文件对象
- File file = new File("d:\\Java\\HelloWorld.java");
- // 获取文件的绝对路径,即全路径
- String absPath = file.getAbsolutePath();
- // File中封装的路径是什么获取到的就是什么。
- String path = file.getPath();
- // 获取文件名称
- String filename = file.getName();
- // 获取文件大小
- long size = file.length();
- System.out.println("absPath=" + absPath);
- System.out.println("path=" + path);
- System.out.println("filename=" + filename);
- System.out.println("size=" + size);
- }
- }
运行结果:
5、文件和文件夹的创建删除等
(1)创建
- public static void main(String[] args) throws IOException {
- // 对文件或者文件加进行操作。
- File file = new File("d:\\Java\\file.txt");
- // 创建文件,如果文件不存在,创建 true 如果文件存在,则不创建 false。 如果路径错误,IOException。
- boolean b1 = file.createNewFile();
- System.out.println("b1=" + b1);
- }
(2)删除
- 1 // 对文件或者文件加进行操作。
- 2 File file = new File("d:\\Java\\file.txt");
- 3 // 删除文件操作,注意:不去回收站,慎用。
- 4 boolean b2 = file.delete();
- //如果file.txt存在,则输出true,不存在输出false。
- System.out.println("b2=" + b2);
(3)判断文件是否存在
- // 对文件或者文件加进行操作。
- File file = new File("d:\\Java\\file.txt");
- // 需要判断文件是否存在,存在输出true,不存在输出false
- boolean b3 = file.exists();
- System.out.println("b3=" + b3);
(4)对目录操作:创建
- File dir = new File("d:\\abc");
- // mkdir()创建单个目录。//dir.mkdirs();创建多级目录
- boolean b4 = dir.mkdir();
- System.out.println("b4=" + b4);
(5)对目录操作:删除
- //删除目录时,如果目录中有内容,无法直接删除。
- boolean b5 = dir.delete();
- //只有将目录中的内容都删除后,保证该目录为空。这时这个目录才可以删除。
- System.out.println("b5=" + b5);
(6)判断是文件还是目录
- File f = new File("d:\\Java\\HelloWorld.java");// 要判断是否是文件还是目录,必须先判断存在。
- f.mkdir();//f.createNewFile();
- System.out.println(f.isFile());
- System.out.println(f.isDirectory());
6、listFiles()方法
获取一个目录中的所有文件和文件夹。
在获取指定目录下的文件或者文件夹时必须满足下面两个条件:
(1)指定的目录必须是存在的;
(2)指定的必须是目录。否则容易引发返回数组为null,出现NullPointerException。
- public class FileMethodDemo3 {
- public static void main(String[] args) {
- File dir = new File("D:\\Java");
- // 获取的是目录下的当前的文件以及文件夹的名称。
- String[] names = dir.list();
- for (String name : names) {
- System.out.println(name);
- }
- // 获取目录下当前文件以及文件对象,只要拿到了文件对象,那么就可以获取其中想要的信息
- File[] files = dir.listFiles();
- for (File file : files) {
- System.out.println(file);
- }
- }
- }
7、文件过滤器
(1)通过listFiles()方法,我们可以获取到一个目录下的所有文件和文件夹,但能不能对其进行过滤呢?比如我们只想要一个目录下的指定扩展名的文件,或者包含某些关键字的文件夹呢?
(2)我们是可以先把一个目录下的所有文件和文件夹获取到,并遍历当前获取到所有内容,遍历过程中在进行筛选,但是这个动作有点麻烦,Java给我们提供相应的功能来解决这个问题;
(3)FilenameFilter
查阅File类的API,在查阅时发现File类中重载的listFiles方法,并且接受指定的过滤器。
自定类继承FilenameFilter过滤器接口:
- import java.io.File;
- import java.io.FilenameFilter;
- //定义类实现文件名称FilenameFilter过滤器
- class MyFileFilter implements FilenameFilter {
- public boolean accept(File dir, String name) {
- return name.endsWith(".java");
- }
- }
测试类:
- import java.io.File;
- public class FileDemo2 {
- public static void main(String[] args) {
- // 获取扩展名为.java所有文件
- // 创建File对象
- File file = new File("D:\\Java");
- // 获取指定扩展名的文件,由于要对所有文件进行扩展名筛选,因此调用方法需要传递过滤器
- File[] files = file.listFiles(new MyFileFilter());
- // 遍历获取到的所有符合条件的文件
- for (File f : files) {
- System.out.println(f);
- }
- }
- }
(4)FileFilter过滤器和FilenameFilter的区别
FilenameFilter过滤器中的accept方法接受两个参数,一个当前文件或文件夹所在的路径,一个是当前文件或文件夹对象的名称;
FileFilter 过滤器中的accept方法接受一个参数,这个参数就当前文件或文件夹对象;
当我们需要过滤文件名称时就可以使用FilenameFilter这个过滤器,当我们想对当前文件或文件夹进行过滤,就可以使用FileFilter ,比如需要当前目录下的所有文件夹,就可以使用FileFilter 过滤器。
自定义类继承FileFilter过滤器接口:
- import java.io.File;
- import java.io.FileFilter;
- //文件过滤器
- class FileFileterByDir implements FileFilter {
- public boolean accept(File pathname) {
- return pathname.isDirectory();
- }
- }
测试类:
- import java.io.File;
- public class FileDemo3 {
- public static void main(String[] args) {
- // 获取扩展名为.java所有文件
- // 创建File对象
- File file = new File("D:\\Java");
- // 获取指定目录下的文件夹
- File[] files = file.listFiles(new FileFileterByDir());
- // 遍历获取到的所有符合条件的文件
- for (File f : files) {
- System.out.println(f);
- }
- }
- }
00087_File的更多相关文章
随机推荐
- Copying GC (Part two :Multi Space Copying GC)
目录 近似深度优先搜索方法 Cheney的GC复制算法 前提 执行结果 多空间复制算法 multi_space_copying()函数 mark_or_copy() copy() 执行过程 优缺点 近 ...
- blkid---对系统块设备信息查询
在Linux下可以使用blkid命令对查询设备上所采用文件系统类型进行查询.blkid主要用来对系统的块设备(包括交换分区)所使用的文件系统类型.LABEL.UUID等信息进行查询.要使用这个命令必须 ...
- Android学习总结(1)——好的 Android 开发习惯
Android编码规范 java代码中不出现中文,最多注释中可以出现中文: 局部变量命名.静态成员变量命名:只能包含字母,单词首字母出第一个都为大写,其他字母都为小写: 常量命名:只能包含字母和 ,字 ...
- [Python] Finding the most common elements in an iterable
>>> import collections >>> # Tally occurrences of words in a list >>> cnt ...
- (七十一)关于UITableView退出崩溃的问题和滚动究竟部的方法
[TableView退出崩溃的问题] 近期在使用TableView时偶然发如今TableView中数据较多时,假设在滚动过程中退出TableView到上一界面.会引起程序的崩溃.经过网上查阅和思考我发 ...
- PipeCAD之管道标准库PipeStd
PipeCAD之管道标准库PipeStd eryar@163.com Key Words. PipeCAD, PipeStd, 管道设计软件,管件库 1. Introduction 前不久,两位老友徐 ...
- Array与ArrayList
代码图理解复杂代码 类图 1.抽象动物类Animal using System; using System.Collections.Generic; using System.Linq; using ...
- vue -- config.js 配置跨域文件
1.在使用vue开发的时候经常要涉及到跨域的问题,其实在vue cli中是有我们设置跨域请求的文件的. 2.当跨域无法请求的时候我们可以修改工程下config文件夹下的index.js中的dev -- ...
- 56.lambda表达式与绑定以及伪函数和绑定
#include <iostream> #include <functional> using namespace std; using namespace std::plac ...
- POJ 2394 Dijkstra
题意: 思路: 裸的Dijkstra 爆敲一发模板 //By SiriusRen #include <queue> #include <cstdio> #include < ...