Java I/O---File类
1.File概述
File(文件)类可能有一定的误导性,它不仅仅指代的是文件。它既能代表一个特定的文件的名称,又能代表一个目录下的一组文件集的名称,这样就可以用集合List方法调用和遍历。实际上FilePath(文件路径)对这个类来说是一个更好的名字,当然,你会发现还有很多类的命名不是那么简单易懂。与之相关的还有FilenameFilter接口,可以实现接口中的accept(File dir, String name)方法利用后缀(如.java)筛选文件。
2.目录列表器
如果我们想查看一个目录列表,可以使用File对象的两种方法。我们可以调用list()方法,列出File对象包含的全部列表。同样的可以使用“目标过滤器”筛选符合条件的文件对象。
public static void main(String[] args) { File dir = new File("H:\\workspace\\IO"); //list中传入过滤器,面向接口,策略设计模式 String[] names = dir.list(new FilterBySuffix(".java")); //String[] names = dir.list();//未使用过滤器 System.out.println(names); for(String name : names){ System.out.println(name); }
}
/** * 根据文件名的后缀过滤文件 */ public class FilterBySuffix implements FilenameFilter { private String Suffix;//定义后缀方式 public FilterBySuffix(String suffix) { super(); Suffix = suffix;//构造函数 } /** * @param dir 目录 * @name 被遍历的目录中的文件夹或者文件的名称 */ @Override public boolean accept(File dir, String name) { // TODO Auto-generated method stub return name.endsWith(Suffix);//返回后缀符合要求的如.java } }
FilterBySuffix 实现 FilenameFilter接口,唯一需要覆盖的方法就是accept(),将其提供给list(),进而筛选文件。这种结构成为“回调”,是一种策略设计模式。因为list()接受FilenameFilter对象作为参数,这就意味着我们可以传递实现接口FilenameFilter的任何对象(本例为FilterBySuffix),这也是面向接口编程的思想。
accept()方法有两个参数,第一个为File对象的特定目录,以及包含那个文件名的String。list()方法会为目录下的每个文件名调用accept(),返回一个布尔值。当然也可以使用正则化匹配名称。
3.遍历所有目录(包括子目录)
遍历目录下的所有目录列表需要用到“递归”方法。
public class GetAllFileTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub //遍历指定目录下的所有文件,包括子目录 File dir = new File("H:\\workspace\\IO"); getAllFiles(dir); } public static void getAllFiles(File dir) { File[] files = dir.listFiles(); for(File file : files){ if(file.isDirectory()){ //是否为文件夹,如果是文件夹则递归 getAllFiles(file); }else{ System.out.println(file); } } } }
递归算法主要注意的是:必须给定条件,否则不会停止。
3.删除所有目录
删除目录的思想是:必须从最里层的文件开始删除,否则就可能出现无法删除的情况,同样需要使用递归方法。
public class DeleteDirFile { /** * 删除文件夹和里面的文件 * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub File dir = new File("H:\\workspace\\IO - 副本"); deleteDirFile(dir); } public static void deleteDirFile(File dir){ File[] files = dir.listFiles();//列出文件和文件夹 //对文件夹遍历并删除 for(File file : files){ if(file.isDirectory()){ //如果是文件夹则递归 deleteDirFile(file); }else{ System.out.println(file+":"+file.delete()); } } System.out.println(dir+":"+dir.delete());//删除最外层的文件夹 } }
朱卫恒 2017-12-29 Java I/O系列来自 传智播客课程 和 Java编程思想
Java I/O---File类的更多相关文章
- java中的File类
File类 java中的File类其实和文件并没有多大关系,它更像一个对文件路径描述的类.它即可以代表某个路径下的特定文件,也可以用来表示该路径的下的所有文件,所以我们不要被它的表象所迷惑.对文件的真 ...
- java学习一目了然——File类文件处理
java学习一目了然--File类文件处理 File类(java.io.File) 构造函数: File(String path) File(String parent,String child) F ...
- Java学习笔记——File类之文件管理和读写操作、下载图片
Java学习笔记——File类之文件管理和读写操作.下载图片 File类的总结: 1.文件和文件夹的创建 2.文件的读取 3.文件的写入 4.文件的复制(字符流.字节流.处理流) 5.以图片地址下载图 ...
- Java基础之File类的使用
Java基础之File类的使用 1.File类的构造方法和常用方法 2.对File中listFile(FileNameFilter name)学习 3.与File文件类相关的实现 File类的构造方法 ...
- Java—IO流 File类的常用API
File类 1.只用于表示文件(目录)的信息(名称.大小等),不能用于文件内容的访问. package cn.test; import java.io.File; import java.io.IOE ...
- java io包File类
1.java io包File类, Java.io.File(File用于管理文件或目录: 所属套件:java.io)1)File对象,你只需在代码层次创建File对象,而不必关心计算机上真正是否存在对 ...
- Java学习:File类
Java学习:File类 File类的概述 重点:记住这三个单词 绝对路径和相对路径 File类的构造方法 File类判断功能的方法 File类创建删除功能的方法 File类获取(文件夹)目录和文件夹 ...
- 黑马程序员——【Java基础】——File类、Properties集合、IO包中的其他类
---------- android培训.java培训.期待与您交流! ---------- 一.File类 (一)概述 1.File类:文件和目录路径名的抽象表现形式 2.作用: (1)用来将文件或 ...
- 黑马程序员——JAVA基础之File类,递归,打印流,合并切割流
------- android培训.java培训.期待与您交流! ---------- File类 用来将文件或者文件夹封装成对象 方便对文件与文件夹的属性信息进行操作. File对象可以作为参数传递 ...
- JAVA:IO流——File类
1.掌握File 类的作用 2.可以使用File 类中的方法对文件进行操作 所有的 io 操作都保存在 java.io 包中. 构造方法:public File (String pathname) 直 ...
随机推荐
- Python [习题] 求最长共同子串
s1 = 'abcdefg's2 = 'defabcdoabcdeftw's3 = '1234a's4 = 'wqweshjkb's5 = 'defabcd's6 = 'j' 求 s1.s3.s4.s ...
- Vuejs-组件-<slot> 标签分发内容
资料来自:https://cn.vuejs.org/v2/guide/components.html#具名-Slot 在官方文档的基础上,更加细致的讲解代码. <slot> 标签中的任何内 ...
- scala时间处理
1.获取当前时间的年份.月份.天.小时等等 val nowDay=LocalDate.now().getDayOfMonth val nowDay=LocalTime.now().getHour 2. ...
- CDH5.11..0安装
1.参考: http://www.cnblogs.com/codedevelop/p/6762555.html grant all privileges on *.* to 'root'@'hostn ...
- <meta http-equiv="X-UA-Compatible" content="IE=edge">的作用
X-UA-Compatible是针对ie8新加的一个设置,对于ie8之外的浏览器是不识别的. X-UA-Compatible 是针对 IE8 版本的一个特殊文件头标记,用于为 IE8 指定不同的页面渲 ...
- chrony时间同步 服务端 客户端 安装配置
chrony时间同步 服务端 客户端 安装配置 原创内容http://www.cnblogs.com/elvi/p/7658021.html #!/bin/sh #运行环境 centos7 #chro ...
- thinkphp5源码解析(1)数据库
前言 tp5的数据库操作全部通过Db类完成,比较符合国人的习惯,比如简单的Db::query().Db::execute(),还有复杂的链式操作Db::where('id=1')->select ...
- SQL Server学习之路(一):建立数据库、建立表
0.目录 1.前言 2.建立数据库 2.1 通过SSMS建立数据库 2.2 通过SQL语句建立数据库 3.建立表 3.1 通过SSMS建立表 3.2 通过SQL语句建立表 1.前言 配置是win10+ ...
- js 判断是否为数组的方式 及 类数组转换成数组格式
1. 判断是否为数组的通用方式 Object.prototype.toString.call(o)=='[object Array]' 其他方式: typeof , instanceof, ary ...
- javascript设计模式——享元模式
前面的话 享元(flyweight)模式是一种用于性能优化的模式,“fly”在这里是苍蝇的意思,意为蝇量级.享元模式的核心是运用共享技术来有效支持大量细粒度的对象.如果系统中因为创建了大量类似的对象而 ...