java文件夹相关操作 演示样例代码

package org.rui.io;

import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;
import java.util.regex.Pattern; /**
* 文件夹列表器 測试
*
* @author lenovo
*
*/
//Args:"C:/Users/lenovo/Pictures/screen/*\.jpg"
public class DirList {
public static void main(String[] args) {
String[] argss=new String[1]; String s=DirectoryDemo.class.getPackage().getName().replace(".","/");
String dirPath=new File("").getAbsolutePath()+"\\src\\"+s;
//path=".";
argss[0]="D.*\\.java";
File path=new File(dirPath);
String[] list = null;
if(argss.length==0)
{
list=path.list();
}else
{
System.out.println("all file list==>"+Arrays.toString(path.list()));
//显示文件夹以下的文件并用正则匹配
list=path.list(new DirFilter(argss[0])); }
//排序打印
Arrays.sort(list,String.CASE_INSENSITIVE_ORDER);
for(String dirItem:list)
System.out.println(dirItem);
} } /**
* output:
all file list==>[D.txt, Directory.java, DirectoryDemo.java, DirList.java, fout, inout, Main.java, PPrint.java, zzz.class]
Directory.java
DirectoryDemo.java
DirList.java
*
*/ /**
* 这是一个策略模式的样例
* @author lenovo
*
*/
class DirFilter implements FilenameFilter
{
private Pattern pattern;
public DirFilter(String regex)
{
this.pattern=Pattern.compile(regex);
} public boolean accept(File dir, String name) {
return pattern.matcher(name).matches(); } }

package org.rui.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;
/**
* 文件夹有用工具
* @author lenovo
*
*/
public class Directory {
public static File[] local(File dir,final String regex)
{
return dir.listFiles(new FilenameFilter()
{
private Pattern pa=Pattern.compile(regex);
public boolean accept(File dir, String name)
{
return pa.matcher(name).matches();
}
});
}
//overloaded重载
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();
} 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 f,String regex)
{
return recurseDirs(f,regex);
} public static TreeInfo walk(File f)
{
return recurseDirs(f,".*");
} public static TreeInfo walk(String start)
{
return recurseDirs(new File(start),".*");
} //递归
static TreeInfo recurseDirs(File f,String reg)
{
TreeInfo result=new TreeInfo();
for(File item :f.listFiles())
{
if(item.isDirectory())
{
result.dirs.add(item);//加入文件夹集合
result.addAll(recurseDirs(item,reg));//递归回方法 循环子文件夹
}else
{
if(item.getName().matches(reg))
{
result.files.add(item);//加入文件
}
}
}
return result;
} //////////////////////////mian
public static void main(String[] args) {
String[] argss=new String[1];
//C:\\Users\\lenovo\\Pictures\\screen
argss[0]=".";
if(argss.length==0)
System.out.println(walk("."));
else
for(String arg:argss){
System.out.println(walk(arg));
}
} } }
/**output:
*
//result.addAll(recurseDirs(item,reg));//以下是不递归的输出,文件太多 不好理解 dirs: [.\.settings, .\bin, .\src] files:[.\.classpath, .\.project]
---------------------------------------------------------------------
----------格式化后的输出--------------
---------------------------------------------------------------------
dirs: [
.\.settings
.\bin
.\src
] files:[
.\.classpath
.\.project
]
*/

package org.rui.io;

import java.util.Arrays;
import java.util.Collection;
/**
* 机灵打印机 以使输出更easy浏览
* @author lenovo
*
*/
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)));
} }

package org.rui.io;

import java.io.File;
import java.util.regex.Pattern; public class DirectoryDemo { public static void main(String[] args)
{ String s=DirectoryDemo.class.getPackage().getName().replace(".","/");
String path=new File("").getAbsolutePath()+"\\src\\"+s;
//System.out.println(path);
//path=".";
PPrint.pprint(Directory.TreeInfo.walk(path).dirs);
//all files beginning with "t"
for(File f:Directory.local(path,"D.*"))
System.out.println(f);
System.out.println("----------------");
for(File f:Directory.local(path, "D.*\\.java"))
System.out.println(f);
System.out.println("================");
//class files containing "z" or "Z"
for(File f:Directory.TreeInfo.walk(path,".*[Zz].*\\.class"))
System.out.println(f);
}
}
/**
[
D:\Users\liangrui\workspace\thinking\src\org\rui\io\fout
D:\Users\liangrui\workspace\thinking\src\org\rui\io\fout\f
D:\Users\liangrui\workspace\thinking\src\org\rui\io\inout
]
D:\Users\liangrui\workspace\thinking\src\org\rui\io\D.txt
D:\Users\liangrui\workspace\thinking\src\org\rui\io\Directory.java
D:\Users\liangrui\workspace\thinking\src\org\rui\io\DirectoryDemo.java
D:\Users\liangrui\workspace\thinking\src\org\rui\io\DirList.java
----------------
D:\Users\liangrui\workspace\thinking\src\org\rui\io\Directory.java
D:\Users\liangrui\workspace\thinking\src\org\rui\io\DirectoryDemo.java
D:\Users\liangrui\workspace\thinking\src\org\rui\io\DirList.java
================
D:\Users\liangrui\workspace\thinking\src\org\rui\io\zzz.class
*/

package org.rui.io;

import java.io.File;
import java.io.IOException;
import java.util.regex.Pattern;
/**
* 更近一步创建一个文件夹工具,它能够在文件夹中穿行。
* 这是策略设计模式的还有一个演示样例
* Strategy 接口内嵌在processFile中,使得假设你希望实现它。就必须实现ProcessFiles.Strategy
* 它为读者提供了很多其它的上下文信息。
*
*
*
* @author lenovo
*
*/
public class ProcessFiles { //策略
public interface Strategy
{
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)
processDirectoryTree(new File("."));
else
for(String arg:args)
{
File fileArg=new File(arg);
if(fileArg.isDirectory())//假设是文件夹
processDirectoryTree(fileArg);
else
if(!arg.endsWith(ext))//假设后缀不同样,则加上
arg+="."+ext;//文件后缀
strategy.process(new File(arg).getCanonicalFile());//依教规的 } } catch (Exception e) {
throw new RuntimeException(e);
}
} ////////walk=步行
private void processDirectoryTree(File root) throws IOException {
for(File file:Directory.TreeInfo.walk(
root.getAbsoluteFile(),
".*\\."+ext
))
strategy.process(file.getCanonicalFile()); } //demonstration of how to use
public static void main(String[] args) { new ProcessFiles(new ProcessFiles.Strategy() {
public void process(File file) {
System.out.println(file);
}
}, "java").start(args);;
} }
/**output:
D:\Users\liangrui\workspace\thinking\src\Concatenation.java
D:\Users\liangrui\workspace\thinking\src\org\rui\array\AssemblingMultidimensionalArrays.java
D:\Users\liangrui\workspace\thinking\src\org\rui\array\AutoboxingArrays.java
D:\Users\liangrui\workspace\thinking\src\org\rui\array\Bean.java
.......................
..............
*/

package org.rui.io;

import java.io.File;
/**
* 文件夹检查及创建
* @author lenovo
*
*/
public class MakeDirectories { //提示信息
private static void usage()
{
System.err.println(
"Usage:MakeDirectories path1...\n"+
"Creates each path\n"+
"usage:makedirectories -d path1....\n"+
"deletes each path\n"+
"usage make directories -r path1 path2\n"+
"Renames from path1 to path2"
);
System.exit(0);
} //输出文件信息
private static void fileDate(File f)
{
System.out.println("absolute path:"+f.getAbsolutePath()
+"\ncal read:"+f.canRead()
+"\ncan Write:"+f.canWrite()
+"\n name:"+f.getName()
+"\nparent:"+f.getParent()
+"\nlength:"+f.length()
+"\npath:"+f.getPath()
+"\nlastmodiffied:"+f.lastModified()
); if(f.isFile())
System.out.println("it is a file");
else if(f.isDirectory())
System.out.println("it s a directory"); }
/////////////////////main test///////////////////////////////////////
public static void main(String[] args) {
String argss[]=new String[1];
argss[0]="MakeDirectoriesTest";
if(argss.length<1) usage();
if(argss[0].equals("-r"))
{
if(argss.length!=3)
{
usage();
} File old=new File(argss[1]),rname=new File(argss[2]);
old.renameTo(rname);
fileDate(old);
fileDate(rname);
return; //exit main
} int count=0;
boolean del=false;
if(argss[0].equals("-d"))
{
count++;
del=true;
}
count--;
while(++count<argss.length)
{
File f=new File(argss[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);
}
} fileDate(f); }
}
}
/**output:(80% match)
created:MakeDirectoriesTest
absolute path:D:\Users\liangrui\workspace\thinking\MakeDirectoriesTest
cal read:true
can Write:true
name:MakeDirectoriesTest
parent:null
length:0
path:MakeDirectoriesTest
lastmodiffied:1403013856223
it s a directory
*/

java文件夹相关操作 演示样例代码的更多相关文章

  1. java 线程 原子类相关操作演示样例 thinking in java4 文件夹21.3.4

    java 线程  原子类相关操作演示样例 package org.rui.thread.volatiles; import java.util.Timer; import java.util.Time ...

  2. C编程规范, 演示样例代码。

    /*************************************************************** *Copyright (c) 2014,TianYuan *All r ...

  3. java 又一次抛出异常 相关处理结果演示样例代码

    java 又一次抛出异常 相关处理结果演示样例代码 package org.rui.ExceptionTest; /** * 又一次抛出异常 * 在某些情况下,我们想又一次掷出刚才产生过的违例,特别是 ...

  4. java I/O进程控制,重定向 演示样例代码

    java I/O进程控制,重定向 演示样例代码 package org.rui.io.util; import java.io.*; /** * 标准I/O重定向 */ public class Re ...

  5. Linux下用OTL操作MySql(包含自己封装的类库及演示样例代码下载)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/ClamReason/article/details/23971805 首先重点推荐介绍otl介绍及使 ...

  6. Java连接redis的使用演示样例

    Java连接redis的使用演示样例 Redis是开源的key-value存储工具,redis通经常使用来存储结构化的数据,由于redis的key能够包括String.hash.listset和sor ...

  7. java 线程、线程池基本应用演示样例代码回想

    java 线程.线程池基本应用演示样例代码回想 package org.rui.thread; /** * 定义任务 * * @author lenovo * */ public class Lift ...

  8. 10分钟理解Android数据库的创建与使用(附具体解释和演示样例代码)

    1.Android数据库简单介绍. Android系统的framework层集成了Sqlite3数据库.我们知道Sqlite3是一种轻量级的高效存储的数据库. Sqlite数据库具有以下长处: (1) ...

  9. AppCan移动应用开发平台新增9个超有用插件(内含演示样例代码)

    使用AppCan平台进行移动开发.你所须要具备的是Html5+CSS +JS前端语言基础.此外.Hybrid混合模式应用还需结合原生语言对功能模块进行封装,对于没有原生基础的开发人员,怎样实现App里 ...

随机推荐

  1. python安装与初始

    第一天学习中了解到python是高级语言,和java.PHP性质相同,而c语言.汇编属于低级语言,而高级语言与低级语言的区别,很重要的一点在于内存的处理上,低级语言在调用内存时需要自己编程来控制程序内 ...

  2. 什么是XP

    极限编程(XP)是敏捷过程中最富盛名的一个.下述这些特点使得敏捷过程能够较好地适应商业竞争环境下对小型项目提出的有效资源和有限开发时间的约束. 极限编程的有效实践 极限编程的整体开发过程 极限编程的迭 ...

  3. maven3.5.0在win10中的安装及环境变量配置

    1.maven的下载地址http://maven.apache.org/download.cgi.如下图,下载apache-maven-3.5.0-bin.zip 2.解压缩到自己指定的文件下,mav ...

  4. 九、编写led驱动

    led.c #include <linux/init.h> #include <linux/module.h> #include <linux/cdev.h> #i ...

  5. intellij怎么导入MySQL的驱动包

    1.下载zip格式的驱动包:https://dev.mysql.com/downloads/connector/j/ 2.解压zip,放到任意位置.其中的mysql-connector-java.ja ...

  6. POJ 2001 Shortest Prefixes(字典树)

    Description A prefix of a string is a substring starting at the beginning of the given string. The p ...

  7. BZOJ 1083 [SCOI2005]繁忙的都市 (最小生成树裸题无重边) 超简单写法!!

    Description 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造.城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个交叉路口 ...

  8. http协议与websocket协议(转)

    一.WebSocket是HTML5中的协议,支持持久连接:而Http协议不支持持久连接. 首先HTMl5指的是一系列新的API,或者说新规范,新技术.WebSocket是HTML5中新协议.新API. ...

  9. help2man: can't get `--help' info from automake-1.15 Try `--no-discard-stderr' if option outputs to stderr Makefile:3687: recipe for target 'doc/automake-1.15.1' failed

    /********************************************************************** * help2man: can't get `--hel ...

  10. Dij_heap__前向星。

    //前向星 struct node { int nxt; int val; int lst; node () {} node (int next, int value) : nxt(next), va ...