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) 直 ...
随机推荐
- 使用vue2.x+webpack+vuex+sass+axios+elementUI等快速搭建前端项目框架
一.本文将分享如何快速搭起基于webpack+vue的前端项目框架,利用vue的自己的脚手架工具vue-cli搭建起基本的环境配置,再通过npm包管理工具引入相应的依赖来完善项目的各种依赖框架.下面是 ...
- DES对称加密算法简析
1 对称加密算法 在了解DES算法前,先加单介绍一下对称加密算法,因为DES属于对称加密算法的一种. 对称加密算法是应用较早的加密算法,技术成熟.在对称加密算法中,数据发信方将明文(原始数据)和加密密 ...
- laravel中with()方法,has()方法和whereHas()方法的区别
with() with()方法是用作"渴求式加载"的,那主要意味着,laravel将会伴随着主要模型预加载出确切的的关联关系.这就对那些如果你想加在一个模型的所有关联关系非常有帮助 ...
- Function Programming - First Class(一等公民function)
引用外界一等公民的定义:"在JavaScript世界中函数却是一等公民,它不仅拥有一切传统函数的使用方式(声明和调用),而且可以做到像简单值一样赋值.传参.返回,这样的函数也称之为第一级函数 ...
- Activity 的 4 种加载模式
Activity 的 4 种加载模式 配置 Activity 时可指定 android:launchMode 属性,该属性用于配置该 Activity 的加载模式.该属性支持如下 4 个属性值. * ...
- mysql常用的操作
数据库的常用操作:create database db1; #创建数据库show databases; #查看所有数据库show create database db1;#查看创建的指定数据库alte ...
- Nginx如何配置虚拟主机?
注意,该环境是依赖于http://www.php20.com/forum.php?m ... &extra=page%3D1 基础上进行配置.默认不具备这些文件 .下面是增加一个mytest点 ...
- java 后台代码调用接口
import com.jiuqu.jollykeys.common.util.JsonUtil;import java.io.UnsupportedEncodingException;import j ...
- Ubuntu 14.4 Django模型迁移到数据库提示 LookupError: unknown encoding: utf8mb4 解决方法
由于数据库中需要存储emoji表情,因此需要mysql支持utf8mb4,参考前面的文章升级数据库. 但是由于服务器上面的python-mysqldb连接包版本为1.2.3不支持utf8mb4,因此报 ...
- 《3》CentOS7.0+OpenStack+kvm云平台部署—配置Glance
感谢朋友支持本博客,欢迎共同探讨交流.因为能力和时间有限,错误之处在所难免,欢迎指正. 假设转载.请保留作者信息. 博客地址:http://blog.csdn.net/qq_21398167 原博文地 ...