`
leo1211
  • 浏览: 137990 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

加载任意ClassPath路径下的文件

阅读更多
package com.commons.loadfile;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import java.util.Stack;


/**
* 运用"广度优先算法" 遍历ClassPath文件结构,搜索用户输入文件名对应文件,并返回该文件在类路径下的全路径名,
* 如:com/mystruts/struts.xml
* 可用于加载任意ClassPath路径下的配置文件(.xml,.properties等)
* @author Leo  2009-8-12 22:30:56
*
*/
public final class FileLoadUtil {


/**
*  内部类    文件(包括文件夹)信息Bean
* @author Administrator
*
*/
class FileInfo{
File file;
String classPath;

public FileInfo(File file,String classPath) {
super();
this.file = file;
this.classPath = classPath;
}
}



private  String result =null; //返回的文件在ClassPath下的全路径名

public String getFilePath(String resource){

String  baseRealClassPath= FileLoadUtil.class.getResource("/").getPath(); //取得当前系统的classpath根的绝对路径
File rootDir = new File(baseRealClassPath);
FileInfo  rootInfo= new FileInfo(rootDir , "");
Stack<FileInfo> stack = new Stack<FileInfo>();
stack.push(rootInfo);
dealLevel(stack , resource );
return result;
}
/**
* 递归处理同一层次的文件集合
* @param stack
* @param fname
*/
private void dealLevel(Stack<FileInfo> stack , String fname ) {
if(stack==null || stack.size()==0) return;
Stack<FileInfo> st = new Stack<FileInfo>();
int i =stack.size();
for(;i!=0;i--) {
FileInfo info = stack.pop();
result = dealElement(info,fname,st);
if(result!=null && result.length()>0)
return;
}

if(st==null || st.size()==0) {
return;
}else {
dealLevel(st, fname);
}
}

/**
* 处理单个文件 或 目录
* @param info
* @param fname
* @param stack
* @return
*/
private String dealElement(FileInfo info ,String fname, Stack<FileInfo> stack) {
if(info==null || info.file==null) return null;
if(info.file.isFile()) {
// System.out.println("=========" + info.classPath);
if(compareFileName(info.file , fname)) {
return info.classPath;
}
} else {
File[] files = info.file.listFiles();
if(files==null  && files.length==0)  return null;
for(File f : files) {
FileInfo fi = new FileInfo(f , ("").equals(info.classPath) ?  info.classPath + f.getName() :info.classPath + "/"+ f.getName() );
stack.push(fi);
}

}
return null;
}

/**
*
* @param file
* @param fileName
* @return
*/
private boolean compareFileName(File file ,String fileName) {
if(file==null || fileName==null) return false;
// System.out.println(file.getName());
if(file.getName().equals(fileName)) {
return true;
}
return false;
}

/**
* 测试入口方法
* @param args
*/
public static void main(String[] args) {
FileLoadUtil wf = new FileLoadUtil();
String fileClassPath = wf.getFilePath("jdbc.properties");
System.out.println("获得的文件的类路径: " + fileClassPath);
Properties p = new Properties();
InputStream is = FileLoadUtil.class.getClassLoader().getResourceAsStream(fileClassPath);
try {
p.load(is);
System.out.println(p.getProperty("jdbc.driverClassName"));
System.out.println(p.getProperty("jdbc.url"));

} catch (IOException e) {
e.printStackTrace();
} finally {
if(is!=null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}


}

}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics