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();
}
}
}
}
}
分享到:
相关推荐
jdk的classpath路径和环境配置 jdk的classpath路径和环境配置
将classpath路径下的配置文件加载进properties集合,并实现Student接口,多态形式,提高程序的可维护性
本文档介绍了spring中的在classpath中加载配置文件
主要介绍了浅谈web项目读取classpath路径下面的文件,具有一定借鉴价值,需要的朋友可以参考下
主要介绍了spring boot加载资源路径配置和classpath问题解决,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
java实现 获取指定路径下 指定格式 的所有文件
在启动一些java程序要加载很多的jar运行。特别是在测试时,只在运行时临时exprot一些jar包到CLASSPATH里。 这个脚本就实现了这个动能。
主要介绍了Java 中获取类路径 classpath 的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
加载文件资源的三种方式 ~1.从classpath根目录下加载指定名称的文件 2.从classpath根目录下加载指定名称的文件 3. 从classpath根目录下加载指定名称的文件 4. 获取当前文件的绝对路径
maven打包后,读取类路径下的配置文件,pom.xml配置,利用该配置可以成功读取类路径下相应的文件
关于java的classpath补充,详细说明如何配置classpath,如火热让javac正确编译运行java文件
classpath备份
NULL 博文链接:https://wangbing9577.iteye.com/blog/2175197
本文详细叙述了.classpath中各种属性的含义
主要介绍了Spring配置中的"classpath:"与"classpath*:"的区别,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
今天小编就为大家分享一篇关于JavaWeb项目中classpath路径详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
Android 4.4.4源码的.classpath文件,主要用于将Android 4.4.4源码的导入到eclipse工具中,提供给需要学习android源码的同学,也自己顺便记录一下,方便查找。
.classpath
本篇文章是对获取JAVA路径,包括CLASSPATH外的路径的方法进行了详细的分析介绍,需要的朋友参考下
The archive: referenced by the classpath, does not exist.