ThinkJava-File类

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类的更多相关文章
- java中File类的使用
public class FileLei { public static void main(String[] args) throws IOException { //..表示上 ...
- File 类
File 类:文件和目录(文件夹)路径名的抽象表现形式. 方法 1.创建功能 public boolean createNewFile():创建文件 public boolean mkdir():创建 ...
- C#File类常用的文件操作方法(创建、移动、删除、复制等)
File类,是一个静态类,主要是来提供一些函数库用的.静态实用类,提供了很多静态的方法,支持对文件的基本操作,包括创建,拷贝,移动,删除和 打开一个文件. File类方法的参量很多时候都是路径path ...
- File类基础
File类的作用: Java的io包中定义了File类,用于对文件或文件夹的管理操作. File类只能够用于表示文件或文件夹的信息(属性)和对该文件或文件夹的删除创建操作 (不能对内容进行访问) 通过 ...
- 【转】File类应用 - FilenameFilter 和 FileFilter
FilenameFilter & FileFilter FilenameFilter 和 FileFilter 都是用来过滤文件,例如过滤,以.jpg或者.java结尾的文件,通过看他们的源码 ...
- Java篇-File类之创建删除
/** * */ package com.io.file; import java.io.File; import java.io.IOException; import org.junit.Test ...
- JavaIO之File类
Java-IO之File类 Java-IO之File类 1. File类 1.1. File类说明 1.2. 体验 File 类 1.3. 构造一个 File 类实例: 1.4. 路径: 1.4.1. ...
- I/O流——File类及使用
I/O框架介绍 I/O是计算机输入/输出的接口.Java的核心库java.io提供了全方面的I/O接口,包括:文件系统的操作,文件读写,标准设备的输出等. File类及使用 ① 一个File类的对 ...
- 初学File类
对File类的基本方法的理解 今天刚开始学了File类 一开始看思想编程看得迷迷糊糊的,之后受不了了,直接去看API文档 归纳: File->java.util File类的主要方法: 构造方法 ...
- Java File类总结和FileUtils类
Java File类总结和FileUtils类 文件存在和类型判断 创建出File类的对象并不代表该路径下有此文件或目录. 用public boolean exists()可以判断文件是否存在. Fi ...
随机推荐
- linux下查看当前登陆的用户数目
在shell下输入以下语句即可获取: who | awk '{print $1}' | sort | uniq | wc -l
- BZOj 墨墨的等式(转化为最短路)题解
题意:中文题意不解释... 思路:这道题居然可以转化为最短路orz,要等式有非负整数解,我们可以转化一下:每个ai不限数量,问你能用ai数组拼出多少个Bmin~Bmax范围内的数,有点像完全背包的感觉 ...
- Scan法求凸包
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1348 给一个半径和n个点 求圆的周长 + n个点的凸包的周长 #include<bits/std ...
- python应用-掷骰子模拟-pygal
pygal安装: Linux下: pip install pygal Windows下: python -m pip install pygal 效果如图: # -*- coding: utf-8 - ...
- VNC Viewer连接Cent OS 时的 复制粘帖 功能
虽然 VNC Viewer 比起 vsphere Client 来, 感觉性能差一点. 但毕竟也是个选择. 找了一下 它的这个 功能. 运行一下 vncconfig & 就可以了. 实测好用. ...
- 谈谈WPF中的CollectionView与CollectionViewSource
https://www.cnblogs.com/zhouyinhui/archive/2007/12/07/987076.html
- 使用AspNetPager进行分页,查询条件丢失问题
在Asp.Net中使用AspNetPager进行分页时,发现一个问题: 当通过查询条件进行查询后,对查询结果进行翻页操作时,查询条件会丢失. 当修改UrlPaging属性后(设置UrlPaging=“ ...
- 101. Symmetric Tree -- 判断树结构是否对称
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For e ...
- facebook开源的prophet时间序列预测工具---识别多种周期性、趋势性(线性,logistic)、节假日效应,以及部分异常值
简单使用 代码如下 这是官网的quickstart的内容,csv文件也可以下到,这个入门以后后面调试加入其它参数就很简单了. import pandas as pd import numpy as n ...
- python学习笔记(四)---python不能输出中文问题
只需要在所有代码的最前面加上:#coding:utf-8 即可