JAVA I/O系统 Thinking in Java 之 File类
File类的文件具有一定的误导性,我们可能会认为它指代的是文件,实际上并非如此。它技能代表一个特定文件的名称,又能代表一个目录下的一组文件的名称。如果它指的是一个文件集,我们就可以对此集合调用list()方法,从而获取一个目录下的所有文件名称。实际上,FilePath是一个更好的名字。
1.目录列表器
这里尝试获取一个目录下的全部文件和部分文件,首先获取目录下所有的文件名称。
public static void main(String[] args) {
String filePath = "D:\\file\\imgs\\order";
File file = new File(filePath);
String[] list = file.list();
//打印该目录下所有的文件
System.out.println(Arrays.toString(list));
}
控制台:
[2dbbd28c3f3b4d3b591557fec3e6a528.png, abc.png, adbc.jpg, afa409b3e0db9edd5f5f91ccb4781546.png, asd.jpeg, b121502f8ed9346f9ee1236e5a1f7ab4.png, b121502f8ed9346f9ee1236e5a1f7ab4.png.webp]
然后我们尝试获取该目录下所有的png文件。
String[] list1 = file.list(new FilenameFilter() {
private Pattern pattern = Pattern.compile(".*\\.png");
@Override
public boolean accept(File dir, String name) {
return pattern.matcher(name).matches();
}
});
System.out.println(Arrays.toString(list1));
控制台:
[2dbbd28c3f3b4d3b591557fec3e6a528.png, abc.png, afa409b3e0db9edd5f5f91ccb4781546.png, b121502f8ed9346f9ee1236e5a1f7ab4.png]
此处用到了接口FilenameFilter,该接口的定义十分简单,内部只有一个accecpt方法,我们可以使用匿名内部类自定义实现过滤方法。
2.目录实用工具
目录遍历器Driectory和格式化打印器PPrint。原理还是利用过滤接口FilenameFilter+正则Pattern来实习,使用Directory可以遍历某个目录下所有的符合正则表达式的文件。
Driectory。
/*
* Copyright (c) 2019. 唐江华 保留所有权。
*/
package com.io.fileClass;
import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Pattern;
/**
* @author tangjianghua
* @data @data
*/
public final class Driectory {
/**
* 匹配dir下符合reg的所有文件,并返回文件数组
* @param dir
* @param reg
* @return File[]
*/
public static File[] local(File dir,final String reg){
return dir.listFiles(new FilenameFilter() {
private Pattern p = Pattern.compile(reg);
@Override
public boolean accept(File dir, String name) {
return p.matcher(name).matches();
}
});
}
/**
* 匹配path下符合reg的所有文件,并返回文件数组
* @param path
* @param reg
* @return File[]
*/
public static File[] local(String path,final String reg){
return local(new File(path),reg);
}
/**
* 匿名内部类TreeInfo
* 用来封装每级目录和文件
*/
public static class TreeInfo implements Iterable{
public List files = new ArrayList();
public List dirs = new ArrayList();
@Override
public Iterator iterator() {
return files.iterator();
}
//添加另一个对象的元素
void addAll(TreeInfo other){
files.addAll(other.files);
dirs.addAll(other.dirs);
}
@Override
public String toString() {
// 使用工具PPrint打印
return "dirs: " +PPrint.pformat(dirs)+"\n\nfiles: "+PPrint.pformat(files);
}
}
public static TreeInfo walk(String start ,String reg){
return recurseDirs(new File(start), reg);
}
public static TreeInfo walk(File start ,String reg){
return recurseDirs( start , reg);
}
public static TreeInfo walk(String start){
return recurseDirs(new File(start), ".*");
}
public static TreeInfo walk(File start){
return recurseDirs( start , ".*");
}
/**
* 从其实目录startDir开始遍历获取所有的目录和文件
* @param startDir
* @param reg
* @return TreeInfo
*/
static TreeInfo recurseDirs(File startDir ,String reg){
TreeInfo result = new TreeInfo();
for (File item : startDir.listFiles()) {
if (item.isDirectory()) {
//如果是目录,则添加目录并递归
result.dirs.add(item);
result.addAll(recurseDirs(item,reg));
}else {
// 过滤文件
if (startDir.getName().matches(reg)) {
result.files.add(item);
}
}
}
return result;
}
public static void main(String[] args) {
if(args.length == 0){
//如果参数长度为0,则walk当前目录
System.out.println(walk("."));
}else{
for (String arg: args){
System.out.println(walk(arg));
}
}
}
}
PPrint。
/*
* Copyright (c) 2019. 唐江华 保留所有权。
*/
package com.io.fileClass;
import java.util.Arrays;
import java.util.Collection;
/**
* @author tangjianghua
* @data @data
*/
public class PPrint {
public static String pformat(Collection c){
if (c.size() == 0) {
return "[]";
}
StringBuilder result = new StringBuilder("[");
for (Object elem : c) {
if (c.size() != 1) {
result.append("\n");
}
result.append(elem);
}
if (c.size() != 1) {
result.append("\n");
}
result.append("]");
return result.toString();
}
public static void pprint(Collection c){
System.out.println(pformat(c));
}郑州较好的妇科医院 http://www.kd0371.com/
public static void pprint(Object[] c){
System.out.println(Arrays.asList(c));
}
}
3.目录的检查及创建
这一小结来认识File有哪些方法,可以帮助我们做什么。
package com.io.fileClass;
import java.io.File;
import java.io.IOException;
import java.util.Date;
/**
* @author tangjianghua
* @data @data
*/
public class MakeDirectories {
public static void main(String[] args) throws IOException{
String path = "D:/test/child/test.txt";
File file = new File(path);
System.out.println("File存不存在:"+file.exists());
System.out.println("File如果不存在我们创建它的父级目录:"+file.mkdirs());
// System.out.println("File如果不存在我们创建它:"+file.mkdir());
System.out.println("File如果不存在我们创建它:"+file.createNewFile());
System.out.println("File是路径吗:"+ file.isDirectory());
System.out.println("File是文件吗:"+ file.isFile());
System.out.println("File的父级目录:"+file.getParent());
System.out.println("File的绝对路径:"+file.getAbsolutePath());
System.out.println("File的规范路径:"+file.getCanonicalPath());
System.out.println("File的路径:"+file.getPath());
System.out.println("File是否可读:"+file.canRead());
System.out.println("File是否可写:"+file.canWrite());
System.out.println("File是否可执行:"+file.canExecute());
System.out.println("File是否是绝对的:"+file.isAbsolute());
System.out.println("File是否被隐藏:"+file.isHidden());
System.out.println("File的名称:"+file.getName());
System.out.println("File最后一次修改时间:"+ new Date(file.lastModified()));
//File如果存在则删除:
file.deleteOnExit();
}
}
JAVA I/O系统 Thinking in Java 之 File类的更多相关文章
- Java I/O系统学习系列一:File和RandomAccessFile
I/O系统即输入/输出系统,对于一门程序语言来说,创建一个好的输入/输出系统并非易事.因为不仅存在各种I/O源端和想要与之通信的接收端(文件.控制台.网络链接等),而且还需要支持多种不同方式的通信(顺 ...
- Java IO流详解(二)——File类
在上一章博客中简单的介绍了Java IO流的一些特征.也就是对文件的输入输出,既然至始至终都离不开文件,所以Java IO流的使用得从File这个类讲起. File类的描述:File类是文件和目录路径 ...
- java基础之io流总结二:File类基本应用
File类的概述: File类是对文件系统中文件以及文件夹进行封装的对象,可以通过对象的思想来操作文件和文件夹. File类保存文件或目录的各种元数据信息,包括文件名.文件长度.最后修改时间.是否可读 ...
- Java的IO系统
Java IO系统 "对语言设计人员来说,创建好的输入/输出系统是一项特别困难的任务." 由于存在大量不同的设计方案,所以该任务的困难性是很容易证明的.其中最大的 ...
- Java 如何获取系统时间
Java 如何获取系统时间 import java.text.SimpleDateFormat; import java.util.Date; public class Test { public s ...
- Java I/O系统学习系列二:输入和输出
编程语言的I/O类库中常使用流这个抽象概念,它代表任何有能力产出数据的数据源对象或者是有能力接收数据的接收端对象.“流”屏蔽了实际的I/O设备中处理数据的细节. 在这个系列的第一篇文章:<< ...
- Java 学习(21):Java 实例
Java 实例 本章节我们将为大家介绍 Java 常用的实例,通过实例学习我们可以更快的掌握 Java 的应用. Java 环境设置实例 //HelloWorld.java 文件 public cla ...
- 黑马程序员——JAVA基础之File类,递归,打印流,合并切割流
------- android培训.java培训.期待与您交流! ---------- File类 用来将文件或者文件夹封装成对象 方便对文件与文件夹的属性信息进行操作. File对象可以作为参数传递 ...
- 疯狂java笔记(五) - 系统交互、System、Runtime、Date类
一.程序与用户交互(Java的入口方法-main方法): 运行Java程序时,都必须提供一个main方法入口:public static void main(String[] args){} publ ...
随机推荐
- BeanShell实现加密解密功能
一,在IDEA中写好加密的脚本 二,然后将整个包文件导出,生成jar包 三,将jar包文件放到jmeter的lib/ext目录下 然后在jmeter的BeanShell中引入该类,调用其中的加密方法 ...
- 201871010112-梁丽珍《面向对象程序设计(java)》第十一周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
- 【Spring AOP】通知(五)
一.通知介绍 1. 前置通知(Before) 在目标方法执行之前执行的通知. 前置通知方法,可以没有参数,也可以额外接收一个JoinPoint,Spring会自动将该对象传入,代表当前的连接点,通过该 ...
- [Taro] taro 缓存
taro 缓存 Taro.clearStorageSync() 清除全部缓存 Taro.setStorage(key,value)设置缓存 Taro.getStorage(key)获取缓存 Taro. ...
- 【HDU6327】Random Sequence(记忆化搜索)
点此看题面 大致题意: 给你两个序列\(a,v\),其中\(a\)数组由\(0\sim m\)组成.随机用\(1\sim m\)中的一个数替换\(a\)中的\(0\),求\(\sum_{i=1}^{n ...
- 公共组件及脚手架webpack模板
一.公共组件的创建和使用 前面已经学习vue组件时,了解了公共组件,但在脚手架项目中只使用过局部组件.这里是讲解全局组件如何在脚手架项目中去使用. 1.创建全局组件 在src/components/C ...
- stm32环境搭建
软件下载:https://pan.baidu.com/s/1rat9Vnm 第一部分:软件安装 1.点击安装mdk514.exe,一路next就可以了 2.使用管理员身份打开软件,点击File,进到l ...
- [LeetCode] 148. Sort List 链表排序
Sort a linked list in O(n log n) time using constant space complexity. Example 1: Input: 4->2-> ...
- window环境下的oracle错误error: 0x7e的解决方法
今天连接一个Win2008 Server服务端上的一个oracle出现了下面的这些错误 LoadLibraryFromPath: FQ Dll C:\Windows\system\oci.dll is ...
- markdown格式接口文档模板
源文件 https://files.cnblogs.com/files/bincoding/%E6%8E%A5%E5%8F%A3%E6%96%87%E6%A1%A3.zip 目录 测试接口 查询指定项 ...