`
mj4d
  • 浏览: 299985 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java 读取文件相对路径

    博客分类:
  • java
 
阅读更多

最近遇到在java代码中读取自带文件,只知道可以采用getResourceAsStream,但对具体细节了解不甚详细,在网上查阅了相关资料,对各种情况做了一些汇总,mark一下。


以下是需要读取文件的各种场景:

  • 文件和java文件的相对位置,各个properties文件

 

  • 同时,在依赖的第三方包中还有文件

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

现在需要读取各个properties文件

 

测试代码

我们在TestPath.java中读取各个文件,主要采用

Class.getResourceAsStream(String path) 

Class.getClassLoader().getResourceAsStream(path)

 

两种方式,测试代码如下:

	/**
	 * Class.getResourceAsStream
	 * 
	 * @param path
	 *            各个文件的路径
	 */
	public static void getResourceAsStream(String path) {
		InputStream input = TestPath.class.getResourceAsStream(path);
		showPath(input);
	}
	
	/**
	 * Class.ClassLoader.getResourceAsStream
	 * 
	 * @param path
	 *            各个文件的路径
	 */
	public static void classLoadGetResourceAsStream(String path){
		InputStream input = TestPath.class.getClassLoader().getResourceAsStream(path);
		showPath(input);
	}

	/**
	 * print content in per file
	 * @param input
	 */
	public static void showPath(InputStream input) {
		Properties prop = new Properties();

		if (null == input) {
			throw new RuntimeException("can not load properties: " + input);
		}

		try {
			prop.load(input);
			input.close();
			for (Entry<Object, Object> entry : prop.entrySet()) {
				System.out.println(entry.getKey().toString() + "="
						+ entry.getValue().toString());
			}

		} catch (IOException e) {
			throw new RuntimeException("can not read properties: " + input);
		}
	}

 

 

两种方式和文件路径的具体写法

 

  • 在TestPath.java中采用Class.getResourceAsStream()

 

	public static void testGetResourceAsStream() {
		System.out.println("文件与当前class在同一目录");
		getResourceAsStream("current_path.properties");
		getResourceAsStream("/com/java/path/test/current_path.properties");

		System.out.println("文件在当前class上级目录");
		getResourceAsStream("../parent_path.properties");
		getResourceAsStream("/com/java/path/parent_path.properties");

		System.out.println("文件与当前class在不同的package");
		getResourceAsStream("/com/java/pathanother/another_package.properties");

		System.out.println("文件在class根目录");
		getResourceAsStream("/root_path.properties");
		
		System.out.println("文件位于的依赖第三方包");
		getResourceAsStream("/META-INF/maven/commons-logging/commons-logging/pom.properties");
	}
 

输出:

文件与当前class在同一目录
path=com.java.path.test
path=com.java.path.test

文件在当前class上级目录
path=com.java.path
path=com.java.path

文件与当前class在不同的package
path=com.java.pathanother

文件在class根目录
path=toot

文件位于的依赖第三方包
version=1.1.1
groupId=commons-logging
artifactId=commons-logging
 

 

  • 采用Class.ClassLoader.getResourceAsStream
	public static void testClassLoadGetResourceAsStream() {
		System.out.println("文件与当前class在同一目录");
		classLoadGetResourceAsStream("com/java/path/test/current_path.properties");

		System.out.println("文件在当前class上级目录");
		classLoadGetResourceAsStream("com/java/path/parent_path.properties");

		System.out.println("文件与当前class在不同的package");
		classLoadGetResourceAsStream("com/java/pathanother/another_package.properties");

		System.out.println("文件在class根目录");
		classLoadGetResourceAsStream("root_path.properties");
		
		System.out.println("文件位于的依赖第三方包");
		classLoadGetResourceAsStream("META-INF/maven/commons-logging/commons-logging/pom.properties");
	}
 

 

输出:

文件与当前class在同一目录
path=com.java.path.test

文件在当前class上级目录
path=com.java.path

文件与当前class在不同的package
path=com.java.pathanother

文件在class根目录
path=toot

文件位于的依赖第三方包
version=1.1.1
groupId=commons-logging
artifactId=commons-logging
 
分享到:
评论

相关推荐

    关于java 读取eclipse下文件相对路径 关于Java的文件相对路径问题一直 ....doc

    关于java 读取eclipse下文件相对路径 关于Java的文件相对路径问题一直 ...

    Java 中几种获取文件路径的方式

    文件的路径通常有 相对路径 与 绝对路径。 2.1 相对路径 以当前文件为基准进行一级级目录指向被引用的资源文件。在 Java 代码中以当前运行的代码所在的位置为参照位置,只要被引用的文件相对于引用的文件的位置不变...

    文件写入,项目相对路径,java反射,模板数据写入

    格式化文件操作,将数据按照模板写入新文件,正则表达式替换模板指定内容,文件读写,stateprocess.java 项目运行文件

    浅谈java 中文件的读取File、以及相对路径的问题

    今天小编就为大家分享一篇浅谈java 中文件的读取File、以及相对路径的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    java压缩文件源码--ZipUtils

    // entry以相对路径的形式设置。以文件夹C:\temp例如temp\test.doc或者test.xls 如果设置不当,会出现拒绝访问等错误 // 分别处理单个文件/目录的entry if(rootStr.equals(tempFile.getPath())){ ...

    springboot如何获取相对路径文件夹下静态资源的方法

    主要介绍了springboot如何获取相对路径文件夹下静态资源的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    一个常用的Java文件操作类FileUtil.java源码下载

    包括其子目录中、将目录中的内容添加到列表、返回文件的URL地址、从文件路径得到文件名、将DOS/Windows格式的路径转换为UNIX/Linux格式的路径、...得到相对路径、检查给定目录的存在性、读取文件的内容、获取图片文件

    Java 获取Web项目相对webapp地址的实例

    下面小编就为大家带来一篇Java 获取Web项目相对webapp地址的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    java实现js、css、图片合并到html文件

    技术点:1、使用htmlparser解析html文件,得到html代码里的js、css、img链接 2、将相对路径的链接转变成绝对路径,并读取资源 3、将css和js合并到html 4、将图片转换成base64编码,写入标签的src

    基于适配spring boot工程开发,在以spring boot框架为基础的项目工程中的pom.xml文件引入的工具包

    hm-tools-js-css 功能:根据URL请求参数将多个javascript文件合并成一个javascript文件返回...支持替换css文件中url引用资源的相对路径为可访问的绝对路径。支持使用yuicompressor对js,css文件内容进行实时压缩、混淆

    java 面试题 总结

    forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。 redirect...

    一个java正则表达式工具类源代码.zip(内含Regexp.java文件)

    以前写了一个java的正规表达式的java工具类,分享一下,有用到的欢迎下载使用。 如果你有常用的定义好的,且测试通过的正规表达式,欢迎跟贴,也让我享用一下 . 类中用到了 jakarta-oro-2.0.jar 包,请大家自己在 ...

    一个开源的Java基础工具包

    可以调用MailAccount(String accountSettingFileBaseClassLoader)读取相对路径的Setting文件,配置参考mailAccount-example.setting 2、com.baijob.commonTools.mail.MailUtil邮件发送工具类,方法请参考注释 此...

    基于javadbf-0[1].4.0.jar包的dbf文件操作源码

    一般的dbf文件都是数据库操作文件,用c语言进行操作的dll很多,但是java操作的很少,我找到了一个javadbf-0[1].4.0.jar的包,但是操作效果很不理想,尤其是末尾空格和乱码问题,于是我在这个jar包的基础上进行进一步...

    php自动提取apk包的信息

    可以用相对路径,如果在根目录,则要用.开始,表示当前目录。 该DEMO文件只对《php上传apk后自动提取apk包的信息》。具体项目运用,请根据自己项目需求改动。如有疑问,欢迎与我交流。 将该文件放至php运行目录下...

    php自动提取apk包的信息程序演示

    可以用相对路径,如果在根目录,则要用.开始,表示当前目录。 该DEMO文件只对《php上传apk后自动提取apk包的信息》参见:http://blog.csdn.net/zm2714/article/details/7938749,中的代码做稍微更改。具体项目运用...

    maven相关资料

    // 使用了classpath:前缀,这样,FileSystemXmlApplicationContext也能够读取classpath下的相对路径 // ApplicationContext factory = new FileSystemXmlApplicationContext("classpath:appcontext.xml"); // ...

    通过java操作excel表格的工具类库jxl

    最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。  搭建环境  将下载后的文件...

    jamspell-java:用于现代拼写检查库JamSpell的Java绑定

    JamSpell Java绑定一个... 该文件应包含要加载的库的资源路径(相对或绝对),该资源路径将被复制到磁盘并加载。 要添加对库不提供内置支持的新平台的支持,请为目标平台编译位于cpp的CMake项目,将其放置在资源类路径

    超级有影响力霸气的Java面试题大全文档

     forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。...

Global site tag (gtag.js) - Google Analytics