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 ...
随机推荐
- SharePoint研究之表单登录配置
本文将演示SharePoint怎样配置表单(Form)登录,后续文章将研究 无密码登录.编程添加用户组.编程添加用户.编程添加文件夹.编程分享文件夹(权限分配)等. 知识点:SharePoint.Sq ...
- HTML深入探究(一)HTML入门
HTML:超文本标记语言HyperText Markup Language,是一种用于创建网页的标准标记语言.HTML 不是一种编程语言,而是一种标记语言,标记语言是一套标记标签 (mar ...
- Android Studio 中实现高德定位并获取相应信息
Android开发项目时常常会遇到定位这个功能,所以写了这篇博客,今天主要讲的高德地图的定位并获取相应信息. 首先导入高德的jar包 选中jar包右键点击 Add As Library, 在buil ...
- java.lang.NoSuchMethodError: org.springframework.core.io.ResourceEditor
这种情况一般是jar包版本问题,pom导入的jar包存在一个2.5.6的,删掉即可.
- @RequestParam注解的作用及用法
最简单的两种写法,在写接口时:加或不加@RequestParam注解的区别 第一种写法参数为非必传,第二种写法参数为必传.参数名为userId 第二种写法可以通过@RequestParam(requi ...
- 002PHP文件处理——文件处理 is_dir mkdir getcwd chdir rmdir
<?php /** * 66 文件处理 is_dir mkdir getcwd chdir rmdir */ //is_dir() 判断一个目录是否存在 //var_dump(is_dir('6 ...
- Git观察和比较
log git log 时间是从下到上,从远到近 whatchanged git whatchanged 时间是从下到上,从远到近 diff --staged 比较工作区和缓存区之间的差异 g ...
- DDMS介绍
DDMS全称:Dalvik Debug Monitor Service 一,DDMS的作用 它提供了截屏.查看线程和堆信息.logcat.进程.广播状态信息.模拟来电呼叫和短信.虚拟地理坐标等等. 二 ...
- python 读写西门子PLC 包含S7协议和Fetch/Write协议,s7支持200smart,300PLC,1200PLC,1500PLC
本文将使用一个gitHub开源的组件技术来读写西门子plc数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作 nu ...
- tensorflow中共享变量 tf.get_variable 和命名空间 tf.variable_scope
tensorflow中有很多需要变量共享的场合,比如在多个GPU上训练网络时网络参数和训练数据就需要共享. tf通过 tf.get_variable() 可以建立或者获取一个共享的变量. tf.get ...