1.1目录列表器:                  

package com.java.io;

import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;
import java.util.regex.Pattern; public class DirList {
public static void main(String[] args) { //System.out.println(System.getProperty("user.dir"));
//E:\workspace\workspace for j2ee\MyTest //“.”知识代表当前工作目录的意思,它是一个相对路径的写法
File path = new File(".");
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 dirItem : list){
System.out.println(dirItem);
}
}
} class DirFilter implements FilenameFilter{
private Pattern pattern;
public DirFilter(String regex){
pattern = Pattern.compile(regex);
} @Override
public boolean accept(File dir, String name) {
return pattern.matcher(name).matches();
} }

以参数:    .*.txt 运行,输出:

option.txt
test.txt
zip.txt

匿名内部类:

package com.java.io;

import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;
import java.util.regex.Pattern; public class DirList2 {
public static FilenameFilter filter(final String regex){
return new FilenameFilter(){
private Pattern pattern = Pattern.compile(regex);; @Override
public boolean accept(File dir, String name) {
return pattern.matcher(name).matches();
}
};
} public static void main(String[] args) {
File path = new File(".");
String [] list;
if(args.length == 0){
list = path.list();
}else{
list = path.list(filter(args[0]));
}
Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);
for(String dirItem : list){
System.out.println(dirItem);
}
}
}

进一步修改,定义作为list()参数的匿名内部类,程序会变得更小:

package com.java.io;

import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;
import java.util.regex.Pattern; public class DirList3 {
public static void main(final String[] args) {
File path = new File(".");
String [] list;
if(args.length == 0){
list = path.list();
}else{
list = path.list(new FilenameFilter(){
private Pattern pattern = Pattern.compile(args[0]); @Override
public boolean accept(File dir, String name) {
return pattern.matcher(name).matches();
}
});
}
Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);
for(String dirItem : list){
System.out.println(dirItem);
}
}
}

1.2目录实用工具                                  

package com.java.io;

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 com.java.util.PPrint; public final class Directory {
/**
* local方法使用listFiles()来产生File数组
* 如果需要List而不是数组,你可以使用Arrays.asList()自己对结果进行转换。
* @param dir
* @param regex
* @return
*/
public static File[] local(File dir, final String regex){
return dir.listFiles(new FilenameFilter(){
private 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);
} @Override
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), ".*");
} static TreeInfo recurseDirs(File startDir, String regex){
TreeInfo result = new TreeInfo();
for(File item : startDir.listFiles()){
if(item.isDirectory()){
result.dirs.add(item);
result.addAll(recurseDirs(item, regex));
}else{
if(item.getName().matches(regex)){
result.files.add(item);
}
}
}
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));
}
}
} }
package com.java.util;

import java.util.Arrays;
import java.util.Collection; public class PPrint {
public static String pformat(Collection<?> c){
if(c.size() == 0){
return "[]";
}
StringBuilder result = new StringBuilder("[");
for(Object elem : c){
if(c.size() != 1){
result.append("\n ");
}
result.append(elem);
}
if(c.size() != 1){
result.append("\n");
}
result.append("]");
return result.toString();
} public static void pprint(Collection<?> c){
System.out.println(pformat(c));
} public static void pprint(Object[] c){
System.out.println(pformat(Arrays.asList(c)));
}
}

运行Directory.java:

1.3目录的检查及创建                                

File类不仅仅只代表存在的文件或目录。也可以用File对象来创建新的目录或尚不存在的整个目录路径。我们还可以查看文件的特性(如:大小,最后修改日期,读/写) ,检查某个File对象代表的是一个文件还是一个目录,井可以删除文件。下面的示例展示了File类的一些其他方法

package com.java.io;

import java.io.File;

public class MakeDirectories {
private static void usage() {
System.err.println(
"Usage:MakeDirectories pathl ...\n" +
"Creates each path\n" +
"Usage:MakeDirectories -d pathl ...\n" +
"Deletes each path\n" +
"Usage:MakeDirectories -r pathl path2\n" +
"Renames from pathl 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's a file");
}
else if(f.isDirectory()){
System.out.println("It's 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]);
File rname = new File(args[2]); //用来把一个文件重命名(或移动)别由参数所指示的另一个完愈不肉的薪路经(也就是另一个File对象)节窟。
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 + " exists") ;
if (del) {
System.out.println("deleting...." + f);
f.delete();
}
}else{
if(!del){
f.mkdirs();
System.out.println("created " + f);
}
}
fileData( f) ;
}
}
}

运行参数:test:

运行参数:-r test test2

test文件夹被重命名为test2

运行参数 -d test2

test2文件夹被删除:

----------------------------

ThinkJava-File类的更多相关文章

  1. java中File类的使用

    public class FileLei {    public static void main(String[] args) throws IOException {        //..表示上 ...

  2. File 类

    File 类:文件和目录(文件夹)路径名的抽象表现形式. 方法 1.创建功能 public boolean createNewFile():创建文件 public boolean mkdir():创建 ...

  3. C#File类常用的文件操作方法(创建、移动、删除、复制等)

    File类,是一个静态类,主要是来提供一些函数库用的.静态实用类,提供了很多静态的方法,支持对文件的基本操作,包括创建,拷贝,移动,删除和 打开一个文件. File类方法的参量很多时候都是路径path ...

  4. File类基础

    File类的作用: Java的io包中定义了File类,用于对文件或文件夹的管理操作. File类只能够用于表示文件或文件夹的信息(属性)和对该文件或文件夹的删除创建操作 (不能对内容进行访问) 通过 ...

  5. 【转】File类应用 - FilenameFilter 和 FileFilter

    FilenameFilter & FileFilter FilenameFilter 和 FileFilter 都是用来过滤文件,例如过滤,以.jpg或者.java结尾的文件,通过看他们的源码 ...

  6. Java篇-File类之创建删除

    /** * */ package com.io.file; import java.io.File; import java.io.IOException; import org.junit.Test ...

  7. JavaIO之File类

    Java-IO之File类 Java-IO之File类 1. File类 1.1. File类说明 1.2. 体验 File 类 1.3. 构造一个 File 类实例: 1.4. 路径: 1.4.1. ...

  8. I/O流——File类及使用

    I/O框架介绍 I/O是计算机输入/输出的接口.Java的核心库java.io提供了全方面的I/O接口,包括:文件系统的操作,文件读写,标准设备的输出等. File类及使用 ①   一个File类的对 ...

  9. 初学File类

    对File类的基本方法的理解 今天刚开始学了File类 一开始看思想编程看得迷迷糊糊的,之后受不了了,直接去看API文档 归纳: File->java.util File类的主要方法: 构造方法 ...

  10. Java File类总结和FileUtils类

    Java File类总结和FileUtils类 文件存在和类型判断 创建出File类的对象并不代表该路径下有此文件或目录. 用public boolean exists()可以判断文件是否存在. Fi ...

随机推荐

  1. supervisor安装与问题

    [转]安装supervisor以及可能碰到的问题 单击此处查看原文 supervisor作为一个进程管理的python软件非常的给力 但是一不小心就会遇到一些问题 就比如下面这个: unix:///v ...

  2. .Net频繁访问数据库的优化探究(一)

    知识点:DataTable.Linq.lamda表达式.Cache 场景:查询部门的所有员工和管理员,并分配相应的权限 实现过程一般为:查询部门,遍历部门(查询员工.分配权限.查询管理员.分配权限) ...

  3. HDU 4714 Treecycle(树形dp)

    http://acm.hdu.edu.cn/showproblem.php?pid=4714 题意:给出一棵树,删除一条边和添加一条边的代价都是1,现在要把这棵树变成环,求需要花的最小代价. 思路: ...

  4. DOM window的事件和方法; Rails查询语法query(查询结构继承); turbolinks的局限;

    window.innerHeight 是浏览器窗口可用的高度. window.outerHeight 是浏览器窗口最大的高度. 打开chrome-inspector,上下移动inspector,看到s ...

  5. 042——VUE中组件之子组件使用$on与$emit事件触发父组件实现购物车功能

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. ViewPager实现引导页(添加导航点,判断是否第一次进入主界面)

    1.引导页的4个界面布局,里面加载一张背景图片 插入到guide的界面布局中(这里不用fragment) guide_background_fragment1.xml <?xml version ...

  7. fatal error: openssl/evp.h: 没有那个文件或目录

    在陆佳华<嵌入式系统软硬件协同设计实战指南 第2版>一书的第13章节 编译U-boot时会遇到2个错误.原因很简单,就从一开始的错误提示着手: fatal error: openssl/e ...

  8. centos6 Nginx+Tomcat负载均衡配置

    一.Nginx简介 Nginx是一个web服务器也可以用来做负载均衡及反向代理使用,目前使用最多的就是负载均衡,具体简介我就不介绍了百度一下有很多,下面直接进入安装步骤 二.Nginx安装 1.下载N ...

  9. 函数响应式编程RxJava

    RxJava 到底是什么 一个词:异步. RxJava 在 GitHub 主页上的自我介绍是 "a library for composing asynchronous and event- ...

  10. 基于tiny4412的u-boot移植(一)

    作者信息 作者:彭东林 邮箱:pengdonglin137@163.com QQ: 405728433 平台介绍 开发环境:win7 64位 + VMware11 + Ubuntu14.04 64位 ...