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. TypeError: write() argument must be str, not bytes报错原因及Python3写入二进制文件方法

    Python2随机写入二进制文件: with open('/python2/random.bin','w') as f: f.write(os.urandom(10)) 但使用Python3会报错: ...

  2. Cracking The Coding Interview 4.1

    //Implement a function to check if a tree is balanced. For the purposes of this question, a balanced ...

  3. Xilinx 7 series FPGA multiboot技术的使用(转)

    reference:https://www.cnblogs.com/chensimin1990/p/9067629.html 当升级程序有错误的时候,系统会启动golden bitstream 注意: ...

  4. 《RECURRENT BATCH NORMALIZATION》

    原文链接 https://arxiv.org/pdf/1603.09025.pdf Covariate 协变量:在实验的设计中,协变量是一个独立变量(解释变量),不为实验者所操纵,但仍影响实验结果. ...

  5. vnode的挂载和更新流程 -- 简介.

    来源 vnode原理 diff图解 <div id="app"> {{someVar}} </div> <script type="text ...

  6. snmp 简单网管协议

    snmpget是取具体的OID的值.(适用于OID值是一个叶子节点的情况) snmpwalk snmpwalk — Fetch all the SNMP objects from an agent & ...

  7. python day 03作业答案

    1. (10) name='aleX leNb' print(name.split('l',1)) (13) name='aleX leNb' a=name.replace('a','A') prin ...

  8. github 多人协作

    1.本地生成私钥: ssh-keygen -C "YourEmail@example.com" (这里的email使用github账号)生成公钥和私钥 2.查看私钥,并添加到自己的 ...

  9. 【Think in java读书笔记】IO系统

    一.FIle类(处理文件目录问题) if else的另外一种写法 ,不加大括号也可以 import java.io.File; import java.io.FilenameFilter; impor ...

  10. 初识爬虫见到的两个类 BufferedWriter和 BufferedReader

    BufferedWriter 和 BufferedReader 为带有默认缓冲的字符输出输入流,因为有缓冲区所以很效率比没有缓冲区的高. 使用BufferedWriter和BufferedReader ...