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 ...
随机推荐
- C++网络通信字节序问题
htonl(), ntohl(), htons(), ntohs() 函数 在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题.这是就可能用到htons(), ntohl(), n ...
- Android -- 在一个Activity开启另一个Activity 并 获取他的返回值。
1. 视图示例, 按选择弹出 2界面, 选择选项 回显到1 2. 示例代码 MainActivity.java, 第一个activity public class MainActivity e ...
- JAVA-随机生成四则运算
代码如下: package jiajianchengchu; import java.util.*; public class jisuan { public static String yuefen ...
- bzoj1069: [SCOI2007]最大土地面积 凸包+旋转卡壳求最大四边形面积
在某块平面土地上有N个点,你可以选择其中的任意四个点,将这片土地围起来,当然,你希望这四个点围成的多边形面积最大. 题解:先求出凸包,O(n)枚举旋转卡壳,O(n)枚举另一个点,求最大四边形面积 /* ...
- 牛客网——G送分了(py)
链接:https://www.nowcoder.net/acm/contest/74/G来源:牛客网 题目描述 杭州人称傻乎乎的人为62,而嘟嘟家这里没有这样的习俗. 相比62,他那里的人更加讨厌数字 ...
- 331. Verify Preorder Serialization of a Binary Tree -- 判断是否为合法的先序序列
One way to serialize a binary tree is to use pre-order traversal. When we encounter a non-null node, ...
- js获取当前日期加上30天之后的日期
var date1 = new Date(); var date2 = new Date(date1); date2.setDate(date1.getDate() + 30); console.lo ...
- bzoj1077
题解 这道题n的范围很小,所以我们可以考虑枚举+判定 设放在天平右边的是C,D. 以A+B<C+D为例,因为差分约束必须是差的形式,所以我们将式子变形 B−C<D−A然后枚举D,A的取值, ...
- Alpha发布
作业链接[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2283] 视频展示 链接[https://v.youku.com/v_show/ ...
- Alpha冲刺一 (9/10)
前言 队名:拖鞋旅游队 组长博客:https://www.cnblogs.com/Sulumer/p/10034872.html 作业博客:https://edu.cnblogs.com/campus ...