java中的File类
File类
java中的File类其实和文件并没有多大关系,它更像一个对文件路径描述的类。它即可以代表某个路径下的特定文件,也可以用来表示该路径的下的所有文件,所以我们不要被它的表象所迷惑。对文件的真正操作,还得需要I/O流的实现。
1.目录列表
如果我们想查看某个目录下有那些文件和目录,我们可以使用File中提供的list方式来查看,这很像linux下的ls命令。
查看E:/html文件夹下所有的php文件,执行的时候输入的参数为正则表达式
package com.dy.xidian; import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;
import java.util.regex.Pattern; public class DirList {
static File path = new File("E:/html");
public static void main(String[] args) {
String[] list;
// 获取整个目录列表
if (args.length == 0)
list = path.list();
else
list = path.list(new DirFilter(args[0]));
Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);
for (String string : list) {
System.out.println(string);
}
}
} class DirFilter implements FilenameFilter {
private Pattern pattern;
public DirFilter(String regex) {
pattern = Pattern.compile(regex);
} public boolean accept(File dir, String name) {
// find匹配的是字符串的子序列,我们可以认为是不严格匹配
return pattern.matcher(name).find();
}
}

2.目录实用工具
该工具有两个作用
- 遍历所有目录及其子目录
- 遍历目录下的文件以及其子目录下的文件
package com.dy.xidian; 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; import net.mindview.util.PPrint; public final class Diractory {
public static File[] local(File dir, final String regex) {
return dir.listFiles(new FilenameFilter() {
Pattern pattern = Pattern.compile(regex);
@Override
public boolean accept(File dir, String name) {
return pattern.matcher(new File(name).getName()).matches();
}
});
} public static File[] local(String path, final String regex) {
return local(new File(path), regex);
} public static class TreeInfo implements Iterable<File> {
public List<File> files = new ArrayList<File>();
public List<File> dirs = new ArrayList<File>(); @Override
public Iterator<File> iterator() {
return files.iterator();
} void addAll(TreeInfo other) {
files.addAll(other.files);
dirs.addAll(other.dirs);
} public String toString() {
return "dirs: " + PPrint.pformat(dirs) + "\n\nfiles:"
+ PPrint.pformat(files);
}
} public static TreeInfo walk(String start, String regex) {
return recurseDirs(new File(start), regex);
} public static TreeInfo walk(File start, String regex) {
return recurseDirs(start, regex);
} public static TreeInfo walk(File start) {
return recurseDirs(start, ".*");
} public static TreeInfo walk(String start) {
return recurseDirs(new File(start), ".*");
} public static TreeInfo recurseDirs(File startDir, String regex) {
TreeInfo result = new TreeInfo();
for (File file : startDir.listFiles()) {
if (file.isDirectory()) {
result.dirs.add(file);
result.addAll(recurseDirs(file, regex)); //加入子目录信息
} else if (file.getName().matches(regex))
result.files.add(file);
}
return result;
} public static void main(String[] args) {
if (args.length == 0)
System.out.println(walk("."));
else
for (String arg : args) {
System.out.println(walk(arg));
}
}
}

3.目录的检查及创建
File的更倾向于对目录、文件属性的操作,比如路径,存在性,大小,修改时间、读/写权限等,对文件的内容并不关心。
package com.dy.xidian;
import java.io.File;
public class MakeDirectories {
private static void usage() {
System.err.println("Usage: MakeDirectories path1...\n"
+ "Creates each path\n"
+ "Usage: MakeDirectories -d path1...\n" + "Delete each path\n"
+ "Usage: MakeDirectories -r path1 path2\n"
+ "Renames from path1 to path2");
System.exit(1);
}
private static void fileData(File f) {
System.out.println("Absolute path: " + f.getAbsolutePath()
+ "\n Can read: " + f.canRead() + "\n Can write: "
+ f.canWrite() + "\n getName: " + f.getName()
+ "\n getParent: " + f.getParent() + "\n getPath: "
+ f.getPath() + "\n length: " + f.length()
+ "\n lastModified: " + f.lastModified());
if (f.isFile())
System.out.println("It is a file");
else if (f.isDirectory())
System.out.println("It is a directory");
}
public static void main(String args[]) {
if (args.length < 1)
usage();
if (args[0].equals("-r")) {
if (args.length != 3)
usage();
//文件重命名,若文件名冲突,则命名函数执行失败
File old = new File(args[1]), rname = new File(args[2]);
old.renameTo(rname);
fileData(old);
fileData(rname);
return;
}
int count = 0;
boolean del = false;
if (args[0].equals("-d")) {
count++;
del = true;
}
count--;
while (++count < args.length) {
File f = new File(args[count]);
if (f.exists()) {
System.out.println(f + " existd");
if (del) {
System.out.println("deleting..." + f);
f.delete();
}
} else if (!del) {
f.mkdirs();
System.out.println("create " + f);
}
fileData(f);
}
}
}
该代码能够进行目录/文件的创建,删除,重命名操作.
java中的File类的更多相关文章
- 详谈JAVA中的file类与IO流
File类 位置于java.io包构造方法:File(String parent, String child)new file("d:\\","a.txt") ...
- [原创]Java中使用File类的list方法获取一定数量的文件:FilenameFilter接口的特殊用法
前言:有时候我们可能会遇到这样一个问题:需要遍历一个包含极多文件的文件夹,首先想到的肯定是使用File.list()方法,该方法返回一个String[],但是如果文件达到几亿呢?这个时候我们就需要分批 ...
- Java中的File类,递归是什么?
一.IO概述 当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作. 当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作. 因此我们把这种输入和输出动作称为 ...
- 用Java中的File类模拟实现对系统文件的增删改查效果
码字不易,三连支持一波吧 IO操作向来是各大语言的热区,而对文件的操作也是重中之重. 那么在Java中也给我们提供了很多关于文件操作的类.今天我就用一个比较基本的File类来模拟实现对文件的增删改查效 ...
- java中关于File类的细说
File类是我们接触的比较多的类,当初学习是真是傻傻分不清啊.今天就总结一下file的一些比较不好区分的地方. 首先:当然就是构造方法 File f = new File("文件路径&quo ...
- java中关于File类的mkdirs()和FIle()构造方法在windows环境内网测试总结
环境:环境是内网windows,传入路径的时候不带盘符,并且服务器的win10也不是超级管理员账户 关于File类的mkdirs()远程访问创建不了文件和路径的问题. 如果浏览器操作者是windows ...
- Java中使用File类删除文件夹和文件
删除工具类: import java.io.File; public class DeleteAll{ public static void deleteAll(File file){ if(file ...
- Java学习笔记——File类之文件管理和读写操作、下载图片
Java学习笔记——File类之文件管理和读写操作.下载图片 File类的总结: 1.文件和文件夹的创建 2.文件的读取 3.文件的写入 4.文件的复制(字符流.字节流.处理流) 5.以图片地址下载图 ...
- JAVA中的File.separate(跨平台路径)
转: JAVA中的File.separate(跨平台路径) 2016年03月27日 23:33:50 才不是本人 阅读数:1952 在Windows下的路径分隔符和Linux下的路径分隔符是不一样 ...
随机推荐
- poj 2195 KM算法
题目链接:http://poj.org/problem?id=2195 KM算法模板~ 代码如下: #include "stdio.h" #include "string ...
- Python开发之【简单计算器】
开发一个简单的python计算器 1.实现加减乘除及括号优先级解析 2.用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * ...
- java帮助文档下载
JAVA帮助文档全系列 JDK1.5 JDK1.6 JDK1.7 官方中英完整版下载JDK(Java Development Kit,Java开发包,Java开发工具)是一个写Java的applet和 ...
- 【MVC 4】2.使用 Razor
作者:[美]Adam Freeman 来源:<精通ASP.NET MVC 4> Razor 是微软 MVC3 引入的视图引擎的名称,并在MVC 4 中进行了修订.视图引擎处理 A ...
- 【Android UI设计与开发】2.引导界面(二)使用ViewPager实现欢迎引导页面
1.实现的效果 2.编码前的准备工作 ViewPager是Android3.0之后提供的新特性,所以要想让你的应用向下兼容就必须要android-support-v4.jar这个包的支持,这是一个来自 ...
- 【读书笔记《Android游戏编程之从零开始》】15.游戏开发基础(剪切区域)
剪切区域也称为可视区域,是由画布进行设置的:它指的是在画布上设置一块区域,当画布一旦设置了可视区域,那么除此区域外,绘制的任何内容都将看不到:可视区域可以是圆形.矩形等等. 画布提供了三种设置可视区域 ...
- Codeforces Round #274 Div.1 C Riding in a Lift --DP
题意:给定n个楼层,初始在a层,b层不可停留,每次选一个楼层x,当|x-now| < |x-b| 且 x != now 时可达(now表示当前位置),此时记录下x到序列中,走k步,最后问有多少种 ...
- 转: EclipseIDE开发 for C++
Eclipse 开发C++ 程序 http://tangmingjie2009.iteye.com/blog/2088363 Eclipse 开发C++ 程序 (二) 静态库 http://tangm ...
- View (四)视图状态及重绘流程分析
相 信大家在平时使用View的时候都会发现它是有状态的,比如说有一个按钮,普通状态下是一种效果,但是当手指按下的时候就会变成另外一种效果,这样才会给 人产生一种点击了按钮的感觉.当然了,这种效果相信几 ...
- Android Studio中提示:Project SDK is not defined
Android Studio中提示:Project SDK is not defined 2015 年 4 月 1 日 下午 9:04crifan已有2209人围观我来说几句 [背景] 之前用Andr ...