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的更多相关文章
随机推荐
- CentOS 源设置
安装完CentOS后,系统默认的源可能有限满,这时我们需要添加国内比较好的源. 一.国内比较好的源https://opsx.alibaba.com/mirror #阿 ...
- BZOJ3645: Maze(FFT多项式快速幂)
Description 众维拉先后在中土大陆上创造了精灵.人类以及矮人,其中矮人是生性喜好常年居住在地下的洞穴的存在,他们挖掘矿物甚至宝石,甚至用他们的勤劳勇敢智慧在地底下创造出了辉煌宏大的宫殿,错综 ...
- 紫书 习题 10-22 UVa 10479 (找规律)
自己一直在纠结这个串的构造方法 而没有观察串本身的规律-- 2的63次方用 unsigned long long 然后可以发现串是递归构造的. 将串分成1,1,2,4,8,16, 然后会发现s串里面1 ...
- cogs 184. [USACO Oct08] 搭建篱笆
184. [USACO Oct08] 搭建篱笆 ★★ 输入文件:quad.in 输出文件:quad.out 简单对比时间限制:1 s 内存限制:128 MB 勤奋的农夫约翰想要修建一个 ...
- STL heap部分源代码分析
本文假设你已对堆排序的算法有主要的了解. 要分析stl中heap的源代码的独到之处.最好的办法就是拿普通的代码进行比較.话不多说,先看一段普通的堆排序的代码: //调整大顶堆.使得结构合理 void ...
- 转:关于ios 推送功能的终极解决
刚刚做了一个使用推送功能的应用 遇到了一些问题整的很郁闷 搞了两天总算是弄明白了 特此分享给大家 本帖 主要是针对产品发布版本的一些问题 综合了网上一些资料根据自己实践写的 不过测试也可以看看 首先要 ...
- 基于Linux平台的Openvas配置使用视频教学
常见的漏洞扫描工具有Openvas.LSAT.Nessus.X-scan.ShadowSecurityScanner和流光等,openvas是一款最全面的开源漏洞扫描工具,由于openvas安装比较困 ...
- JavaScript--数据结构与算法之集合
集合(Set):是一种包含不同元素的数据结构. 重要特性:1.集合中的成员时无序的:2.集合中不允许相同的成员存在. 使用场景:用于存储一些独一无二的元素. 1 集合的定义:(和高中数学中的集合一样) ...
- 洛谷 P1911 L国的战斗之排兵布阵
P1911 L国的战斗之排兵布阵 题目背景 L国即将与I国发动战争!! 题目描述 L国的指挥官想让他的每一个军营都呈现出国徽形——“L”形(方向无所谓).当然,他的指挥营除外(这叫做个性),他想不出该 ...
- Java7与G1
Lucene 4.8開始不支持java6了,所以在下次版本号升级之前我们要先升级至java7. 我使用1/3的全量索引(7.3G).进行測试,20并发,40万请求: sun jdk 1.6.0_26 ...