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) 直 ...
随机推荐
- JAVA基础2——类初始化相关执行顺序
类初始化相关执行顺序 几个概念说明 代码块的含义与作用 static静态代码块: 一般用于初始化类中的静态变量.比如:给静态的数组或者list变量赋初值.使用static静态代码块进行初始化与直接在定 ...
- 【深度学习系列】用PaddlePaddle和Tensorflow实现AlexNet
上周我们用PaddlePaddle和Tensorflow实现了图像分类,分别用自己手写的一个简单的CNN网络simple_cnn和LeNet-5的CNN网络识别cifar-10数据集.在上周的实验表现 ...
- linux磁盘管理系列-软RAID的实现
1 什么是RAID RAID全称是独立磁盘冗余阵列(Redundant Array of Independent Disks),基本思想是把多个磁盘组合起来,组合一个磁盘阵列组,使得性能大幅提高. R ...
- Mybatis分页插件PageHelper简单使用
一个好的讲解mybatis的博客地址http://www.jianshu.com/nb/5226994 引言 对于使用Mybatis时,最头痛的就是写分页,需要先写一个查询count的select语句 ...
- 51Nod 1289 大鱼吃小鱼 栈模拟 思路
1289 大鱼吃小鱼 栈模拟 思路 题目链接 https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1289 思路: 用栈来模拟 ...
- HDU1075-What Are You Talking About
What Are You Talking About Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 102400/204800 K ...
- Nginx实现https网站配置
咱们下面以google代理实现的方式来实现https.注意这里的https与google的https无关. 代码如下.有备注/usr/local/nginx/config/vhost/hk.cn331 ...
- 十招让Ubuntu 16.04用起来更得心应手(转)
ubuntu 16.04是一种长期支持版本(LTS),是Canonical承诺发布五年的更新版.也就是说,你可以让这个版本在电脑上运行五年! 这样一来,一开始就设置好显得特别重要.你应该确保你的软件是 ...
- JavaScript学习笔记(十六)——面向对象编程
在学习廖雪峰前辈的JavaScript教程中,遇到了一些需要注意的点,因此作为学习笔记列出来,提醒自己注意! 如果大家有需要,欢迎访问前辈的博客https://www.liaoxuefeng.com/ ...
- Python 开发与接口测试学习笔记
这是我跟着虫师学习中积累下来的学习笔记,写得比较简单,适合想学习Python开发与接口测试的初学者学习. 一.开发投票系统 1.参考官网文档,创建投票系统. https://docs.djangopr ...