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精选笔试题
合抱之木,生于毫末:九层之台,起于垒土:千里之行:始于足下.赶快测测你的Java基础知识掌握的如何? 1,下列说法正确的是() A.一个文件里可以同时存在两个public修饰的类 B.构造函数可以被重 ...
- vue.js官方文档 PDF
链接:https://pan.baidu.com/s/1jHMBb5W 密码:gsks
- 逆向实用干货分享,Hook技术第二讲,之虚表HOOK
逆向实用干货分享,Hook技术第二讲,之虚表HOOK 正好昨天讲到认识C++中虚表指针,以及虚表位置在反汇编中的表达方式,这里就说一下我们的新技术,虚表HOOK 昨天的博客链接: http://www ...
- 第四届河南省ACM 表达式求值 栈
表达式求值 时间限制: 1 Sec 内存限制: 128 MB 提交: 14 解决: 7 [提交][状态][讨论版] 题目描述 Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简 ...
- page 简单易懂 分页
基础分页功能 <?php class Page{ //$count是用户设定的值 public $a; function pages($count,$page_num,$url ...
- 基本MarkDown语法
引言 字符串作为一种常见的数据类型,在日常中我们面临各式各样的字符串处理问题,那么,这就要求我们必须掌握一些常用的字符串处理函数.本文尽量囊括常用的字符串处理函数,此文也作为个人的小总结. Pytho ...
- CSS3 box-shadow 内外阴影效果
说明 box-shadow 属性可以给元素边框周围添加一个或者多个阴影效果.定义多个阴影,使用逗号分隔. 语法 box-shadow: none | [inset? && [<o ...
- IIS网站本机可以访问但局域网其他机器无法访问 解决方法
在IIS部署网站的时候,发现只有本机可以访问,通过localhost和IP地址都可以,但是当局域网其他机器访问我的网站的时候,无响应. 我的是WIN10的系统 解决方法: 网站所对应的端口必须对外 ...
- 过渡与动画 - steps调速函数&CSS值与单位之ch
写在前面 上一篇中我们熟悉五种内置的缓动曲线和(三次)贝塞尔曲线,并且基于此完成了缓动效果. 但是如果我们想要实现逐帧动画,基于贝塞尔曲线的调速函数就显得有些无能为力了,因为我们并不需要帧与帧之间的过 ...
- 使用python处理excle表格
# -*- coding: utf-8 -*- import xlrd ########################### #通用功能,读取excel表格中所有数据 #返回一个包含所有单元格名和对 ...