java文件夹相关操作 演示样例代码
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文件夹相关操作 演示样例代码的更多相关文章
- java 线程 原子类相关操作演示样例 thinking in java4 文件夹21.3.4
java 线程 原子类相关操作演示样例 package org.rui.thread.volatiles; import java.util.Timer; import java.util.Time ...
- C编程规范, 演示样例代码。
/*************************************************************** *Copyright (c) 2014,TianYuan *All r ...
- java 又一次抛出异常 相关处理结果演示样例代码
java 又一次抛出异常 相关处理结果演示样例代码 package org.rui.ExceptionTest; /** * 又一次抛出异常 * 在某些情况下,我们想又一次掷出刚才产生过的违例,特别是 ...
- java I/O进程控制,重定向 演示样例代码
java I/O进程控制,重定向 演示样例代码 package org.rui.io.util; import java.io.*; /** * 标准I/O重定向 */ public class Re ...
- Linux下用OTL操作MySql(包含自己封装的类库及演示样例代码下载)
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/ClamReason/article/details/23971805 首先重点推荐介绍otl介绍及使 ...
- Java连接redis的使用演示样例
Java连接redis的使用演示样例 Redis是开源的key-value存储工具,redis通经常使用来存储结构化的数据,由于redis的key能够包括String.hash.listset和sor ...
- java 线程、线程池基本应用演示样例代码回想
java 线程.线程池基本应用演示样例代码回想 package org.rui.thread; /** * 定义任务 * * @author lenovo * */ public class Lift ...
- 10分钟理解Android数据库的创建与使用(附具体解释和演示样例代码)
1.Android数据库简单介绍. Android系统的framework层集成了Sqlite3数据库.我们知道Sqlite3是一种轻量级的高效存储的数据库. Sqlite数据库具有以下长处: (1) ...
- AppCan移动应用开发平台新增9个超有用插件(内含演示样例代码)
使用AppCan平台进行移动开发.你所须要具备的是Html5+CSS +JS前端语言基础.此外.Hybrid混合模式应用还需结合原生语言对功能模块进行封装,对于没有原生基础的开发人员,怎样实现App里 ...
随机推荐
- 二. Python基础(2)--语法
二. Python基础(2)--语法 1.实现一个简单的登录系统 '''# 形式1 n = 1 while n < 4: name = input("请输入姓名\n" ...
- C++基础知识:STL简介
1.标准模板库STL ― STL , 即 : Standard Template Library , 是 C++的一部分― STL是常用数据结构和算法的集合― STL的目标是标准化组件 , 提高开发效 ...
- DevExpress WinForms使用教程:图表控件 - 内置深入查询
[DevExpress WinForms v18.2下载] 在最新发布的DevExpress WinForms v18.2中,DevExpress WinForms和ASP.NET图表控件引入嵌套系列 ...
- L259
Few things can feel as crushing as being rejected by someone who you're either dating or romanticall ...
- JavaServlet的文件上传和下载
关于JSP中的文件上传和下载操作 先分析一下上传文件的流程 1-先通过前段页面中的选择文件选择要上传的图片 index.jsp <%@ page language="java" ...
- JavaWeb:脚本标识
脚本标识 一.JSP表达式 1.介绍 用于向页面中输出信息 2.语法格式 <%= 表达式%> 3.注意 在"<%"和"="之间不允许有空格,但 ...
- js常用到的方法积累
//获取对象长度的方法 function countObjLen(obj) { var count = 0; for (var property in obj) { if (Object.protot ...
- 中国顶级黑客X档案
sunwear QQ:47347 微博: http://t.qq.com/sunwe4r 博客:http://hi.baidu.com/patricksunwear 好像不用了 日娃哥.EST核心成员 ...
- python pygame实现简单的网游
此示例为简单的实现游戏服务器端和客户端的消息同步,使用自定定义协议,引入了twisted网络框架,还有诸多不足(其实就是半成品). 资源下载地址: http://download.csdn.net/d ...
- 简短而有效的python queue队列解释
Queue.qsize() 返回队列的大小 Queue.empty() 如果队列为空,返回True,反之False Queue.full() 如果队列满了,返回True,反之False Queue ...