`

[java][io][File]目录工具

阅读更多

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;

public final class DirUtil {
	
	//produce a sequence of File objects that match a regular expression in a local directory
	public static File[] local(File dir, final String regex){
		return dir.listFiles(new FilenameFilter(){
			
			private Pattern pattern = Pattern.compile(regex);

			public boolean accept(File dir,String name ) {
				return pattern.matcher(new File(name).getName()).matches();
			}
			
		});
	}
	//overload local(File,String)
	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>();
		
		public Iterator<File> iterator(){
			return files.iterator();
		}

		public 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(String start){
		return walk(start,".*");
	}
	
	public static TreeInfo walk(File start){
		return walk(start,".*");
	}
	
	//dir recursion
	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) {
		//System.out.println(walk(".",".*l.java"));
		PPrint.pprint(local(".",".*\\.*"));
		//PPrint.pprint(walk(".").dirs);
		//PPrint.pprint(walk(".").files);
	}

}


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 item : c){
			if(c.size()!=1){
				result.append("\n ");
			}
			result.append(item);
		}
		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[] os){
		System.out.println(pformat(Arrays.asList(os)));
	}

}



import java.io.File;
import java.io.IOException;
/**
 * 遍历目录,根据策略处理目录中的文件
 *
 */
public class ProcessFiles {
	
	public interface Strategy{
		public void process(File file);
	}
	
	private Strategy strategy;
	private String ext;
	
	public ProcessFiles(Strategy strategy, String ext){
		this.strategy = strategy;
		this.ext = ext;
	}
	
	public void start(String[] args){
		try {
			if(args.length==0){
				processDirTree(new File("."));
			}else{
				for(String arg : args){
					File fileArg = new File(arg);
					if(fileArg.isDirectory()){
						processDirTree(fileArg);
					}else{
						if(!arg.endsWith("." + ext)){
							arg += "." + ext;
						}
						strategy.process(new File(arg).getCanonicalFile());
					}
				}
			}
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

	public void processDirTree(File file) throws IOException {
		for(File child : DirUtil.walk(file.getAbsolutePath(), ".*\\." + ext)){
			strategy.process(child.getCanonicalFile());
		}
	}
	
	public static void main(String[] args) {
		new ProcessFiles(new ProcessFiles.Strategy(){

			public void process(File file) {
				System.out.println(file);
			}
			
		},"java").start(new String[]{"."});
	}
	

}





分享到:
评论

相关推荐

    Java IO 工具类大全

    File类是Java IO中的基础类,它主要用于文件和目录的创建、删除、重命名以及属性查询等操作。例如,你可以使用`new File("path")`创建一个File对象,然后调用`exists()`检查文件是否存在,`mkdirs()`创建多级目录,`...

    java IO.chm

    File类是Java IO中处理文件和目录的核心类,它可以用来创建、删除、重命名文件,以及获取文件属性等。FileInputStream和FileOutputStream则用于读写文件内容,而FileReader和FileWriter则用于处理字符编码的文件。 ...

    Java IO 基础操作(文件读写和移动)

    在Java中,我们可以使用`java.io.File`类来创建、删除、重命名或检查文件是否存在。例如,创建一个新文件的代码如下: ```java File file = new File("newFile.txt"); file.createNewFile(); ``` 如果要移动文件,...

    常用java IO操作以及用jxl读写excel 工具源代码

    在Java中,我们通常使用`File`类来表示文件或目录,通过`FileInputStream`和`FileOutputStream`来读写文件。`BufferedReader`和`PrintWriter`用于文本文件的读写,而`DataInputStream`和`DataOutputStream`则适用于...

    java file,java读取txt文档

    在Java中,`java.io.File`类是用于操作文件和目录的基本工具。它可以用来创建、删除、重命名文件,以及获取文件的属性信息,如大小、路径、最后修改时间等。 要读取一个TXT文档,我们需要使用Java的I/O流。这里主要...

    Java IO处理类的汇总

    最后,Java IO提供了许多实用工具类,如PrintStream方便输出调试信息,Files类提供了一系列静态方法处理文件操作,而CharArrayReader和CharArrayWriter则在内存中操作字符数组。 总之,Java IO处理类涵盖了从文件...

    Java IO流完整解读

    1. **File类**:这是Java中处理文件和目录的基本类。`File`对象可以代表文件或目录,并提供了创建、删除、重命名以及获取文件属性的方法。在示例代码中,`createFile()`、`deleteDirectory()`、`createDirectory()`...

    Java IO 与 装饰模式

    Java IO 与 装饰模式 在Java编程中,输入输出(IO)处理是程序设计中的重要组成部分,用于读取、写入和处理数据。Java IO库提供了一整套类来支持各种类型的输入输出操作,包括文件、网络、内存等。而装饰模式是一种...

    IO流 javaio java 流

    总的来说,Java的IO流体系结构复杂而强大,它提供了多种工具和策略来处理各种数据传输场景,包括文件操作、网络通信、对象序列化等。理解并熟练运用这些流可以帮助我们构建高效、可靠的Java应用程序。

    Java iO操作全集

    在Java编程语言中,`File`类是进行文件和目录管理的重要工具。它提供了丰富的API来处理文件系统的各种操作,例如创建、删除文件或目录、查询文件属性等。 **构造方法详解:** 1. **构造方法一:** ```java File...

    javaIO实例

    总之,Java IO提供了一套全面的工具来处理各种输入输出任务。无论是在简单的文件操作,还是在复杂的网络通信和多线程应用中,Java IO都能胜任。通过熟练掌握这些概念和实例,开发者能够编写出高效、可靠的输入输出...

    Java IO commons-io-2.5.jar

    相较于Java标准库中的`java.io.File`类提供的`copy()`方法,`commons-io`的`FileUtils.copyFile()`更简单易用,且异常处理更简洁。 总的来说,`commons-io-2.5.jar` 是Java开发者的强大工具,它极大地扩展了Java IO...

    个人写的JavaIO工具

    在这个“个人写的JavaIO工具”中,我们可以看到作者创建了一个自定义的Io工具集,包含了对文件读写、数据流操作、以及代码统计和注释处理的功能。下面将详细讨论这些知识点。 1. **Java IO基础**: - Java IO API...

    java io包课件

    `File`类是`java.io`包的核心组件之一,它可以用来表示文件或目录。通过`File`类,我们可以获取文件的各种属性,如文件名、绝对路径、文件大小、最后修改日期等,但需要注意的是,`File`类本身并不支持读写操作,...

    javaIO流知识大总结

    Java IO 流是Java平台中的核心概念,它...总之,Java IO流是Java开发中不可或缺的一部分,它提供了一整套强大且灵活的工具,用于处理各种数据源的输入输出操作。理解和熟练掌握Java IO流,对提升Java编程能力至关重要。

    javaio实际代码

    在Java中,I/O操作由java.io包提供支持,包含了多种流类,用于读取、写入、处理数据。下面将深入探讨Java I/O的相关知识点,并结合“IOUtil”这个文件名,推测这是一个包含实用I/O工具方法的类。 1. **流的概念**:...

    Java写的FileSearch工具(源码)

    Java编写的FileSearch工具是一个基于Swing界面的文件搜索应用程序,它使用了文件操作类和递归算法来高效地在用户指定的目录下查找特定类型的文件。这个工具对于开发者和普通用户来说都非常实用,因为它可以帮助他们...

    目录多文件上传-JAVA IO流常用详解

    ### 目录多文件上传-JAVA IO流常用详解 #### 概述 本文将详细介绍一个Java程序中的功能模块——如何实现目录多文件上传,并利用Java IO流进行文件复制操作。该功能可以实现在用户选择一个目录后,自动扫描并上传该...

    java-io-file类笔记

    Java中的`java.io.File`类是用于操作文件和目录的核心工具。它不涉及实际的数据流操作,而是专注于文件和文件系统的元数据。`File`对象提供了丰富的功能,包括创建、删除、重命名文件以及检查文件或目录的存在状态,...

Global site tag (gtag.js) - Google Analytics