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. 在命令行中的vim编辑器加上行号

    在使用vim编辑器时运行脚本程序纠察缺少相应的行号,检测起来非常不方便, 所以在vim编辑器每行前面加上相应的行号: 输入命令::set nu 按下回车,完成

  2. log4j的参数配置(转)

    转载:log4j.properties文件各参数含义与配置   以下是配置文件log4j.properties的一些属性: log4j.rootLogger=WARN, stdout, Rlog4j. ...

  3. POJ - 1942 D - Paths on a Grid

    Imagine you are attending your math lesson at school. Once again, you are bored because your teacher ...

  4. shell中环境变量

    Linux中环境变量包括系统级和用户级,系统级的环境变量是每个登录到系统的用户都要读取的系统变量,而用户级的环境变量则是该用户使用系统时加载的环境变量. 所以管理环境变量的文件也分为系统级和用户级的, ...

  5. Web 开发最有用的50款 jQuery 插件集锦——《内容滑块篇》

    http://www.cnblogs.com/lhb25/archive/2013/04/02/50-jquery-plugins-d.html responsive-carousel 是一个内容传送 ...

  6. 1-log4j2入门

    一.入门介绍 log4j apache实现的一个开源的日志组件 slf4j 日志接口即为所有日志框架制定的一种规范的标准接口,并不是一个框架的具体实现,需要配合具体的日志框架使用(如log4j2.lo ...

  7. vuejs 1.x与2.x差异

    1.x与2.x区别 v-for列表查询中 当前下标:$index --> index 1.x 用法 v-for="v in myData" =>$index获取下标 / ...

  8. 前端_标签01_input标签

    <c:forEach items="${itemList }" var="item" varStatus="status">&l ...

  9. css3渐变 两边透明中间高亮

    颜色自己可以调节 如图: 采集器管理下面的那条线就是 css代码: .linear{            width:100%;            height:2px;            ...

  10. RIP路由协议(一)

    实验要求:使用RIPv2配置路由器,使路由器能接收到所有的路由条目 拓扑如下: 配置如下: R1enable 进入特权模式configure terminal 进入全局模式interface s0/0 ...