读取jar包所在目录和jar包内文件
1.读取jar包内文件
读取包内目录路径,通常都是用ClassLoader 是类加载器的抽象类。
- this.getClass().getResourceAsStream("config.properties"); //返回的是一个InputStream
- Thread.currentThread().getContextClassLoader().getResourceAsStream("config.properties")//返回的是一个InputStream
可以用上面的两种方法来实现读取jar包内的资源文件,可以再用一个。
实际上,jar包内路径是跟我们平常的路径地址有一些区别。
- package edu.hxraid;
- import java.io.*;
- import java.net.URL;
- public class Resource {
- public void getResource() throws IOException{
- //查找指定资源的URL,其中res.txt仍然开始的bin目录下
- URL fileURL=this.getClass().getResource("/resource/res.txt");
- System.out.println(fileURL.getFile());
- }
- public static void main(String[] args) throws IOException {
- Resource res=new Resource();
- res.getResource();
- }
- }
当程序打包成jar时执行上面代码会有下面的输出。
file:/C:/ResourceJar.jar!/resource/res.txt
2.读取jar包所在目录的路径
方法一:使用类路径
读取jar包的所在目录可以使用
String path = getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
但是使用这个方法如果有路径中包含中文,则需要使用 Java.net.URLDecoder.decode(path, “UTF-8″) 方法进行转码,如下代码:读取jar包所在的目录路径。
- <span style="font-family:Microsoft YaHei;font-size:10px;">public void main(String arg[]){
- path = getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
- path = path.substring(1,path.length());
- int endIndex = path.lastIndexOf("/");
- path = path.substring(0, endIndex);
- try {
- path = java.net.URLDecoder.decode(path, "utf-8");
- } catch (UnsupportedEncodingException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- System.out.println(path);
- }
- </span>
方法二:使用JVM属性
使用jvm属性读取jar包的所在目录可以使用
String path = System.getProperty("java.class.path")
但是这个方法虽然不需要做转码处理,但是当打包成jar时,
如果执行执行: java -jar e:/test.jar
输出是 e:/test.jar
如果先到jar包所在目录,在执行: java -jar test.jar
输出是 test.jar
所以总得来说两种方法,按需选择采用那种方法。
读取jar包所在目录和jar包内文件相关推荐
- linux启动jar后回到根目录,SpringBoot 打包 Jar 启动后,获得jar包所在目录,SpringBoot获取根目录...
获取根目录五种方法 //第一种 File path = new File(ResourceUtils.getURL("classpath:").getPath()); if (!p ...
- System.getProperty(user.dir) 获取jar包所在目录
/** 获得当前类的完整路径.最后一句 */ package org.outman.dms.server; import java.net.MalformedURLException; import ...
- java 包和目录,Java中包和目录的区别
In a Java Project, does keeping all the .java files in the same folder mean they are in the same pac ...
- Go 学习笔记(3)— 包概念、包特点、包名约束、main 包、包的声明、包的引用、包初始化
1. 包的概念 Go 语言是使用包来组织源代码的,并实现命名空间的管理.任何源代码文件必须属于某个包.源码文件的第一行有效代码必须是 package pacakgeName 语句,通过该语句声明自己所 ...
- SpringBoot上传文件到本服务器 目录与jar包同级
前言 看标题好像很简单的样子,但是针对使用jar包发布SpringBoot项目就不一样了. 当你使用tomcat发布项目的时候,上传文件存放会变得非常简单,因为你可以随意操作项目路径下的资源.但是当你 ...
- SpringBoot打成Jar包运行,获取运行Jar包的目录
SpringBoot获取运行Jar包的目录 // linux和windows下通用 private String getJarFilePath() {ApplicationHome home = ne ...
- spring-boot引用资源:图片、json文件、模板目录(jar包运行依旧有效)
spring-boot引用资源:图片.json文件.模板目录 前端时间,在idea上运行项目OK,但在打成jar包后运行却出了岔子.网上一番搜索,终于得到了解决:使用流,使用类路径 干货 图片,jso ...
- Java程序启动同时复制resources下文件到jar包同级目录
Java代码调用.exe,包括获取exec()中的日志并打印,可以看我之前的博客 一.Java调用exe打包成jar的调用方式有俩种: Java程序中resources下的exe等文件,是可以同时打包 ...
- lib目录和maven dependency目录的jar包冲突
用eclipse时新建项目时,会在lib目录下自动生成一些jar包,然后又在pom.xml文件中添加了依赖,导致lib下的jar包和maven dependency目录下的jar包产生了冲突.刚开始r ...
最新文章
- 无穷级数求和7个公式_考研数学闭关修炼习题讲解(16)无穷级数 附(6)补充解释
- zoj 3386 Trick or Treat 三分 求最大值的 最小值
- Ubuntu apt和dpkg命令用法
- webpack-plugin-webpack.DefinePlugin-应用全局变量,svn-rep-browser
- 离合器预减振超载造成变速箱怠速异响matlab与python仿真分析
- ubuntu网站收集
- springBoot 注入@Slf4j,框架中的方法无法调用。。。
- MariaDB基本操作--(创建用户)(转)
- ups维护服务器,UPS电源的在线维护和管理
- 2W+汉字转拼音JS字库(UTF-8生僻字等通用无乱码)
- GET data:image/jpg;base64,35,37,....... net::ERR_INVALID_URL
- 《关于动态社交网络建模和分析的教程》的读书笔记
- 小说APP源码,实现带下划线的密码输入框
- Redis持久化 - 邱乘屹的个人技术博客
- 【产品】蓝绿发布、滚动发布和灰度发布对比
- JButton:按钮组件
- linux添加ssh key
- Android~获取WiFi MAC地址和IP方法汇总
- python能参加奥赛吗-信息竞赛一定要python吗
- 在javascript中使用正则表达式来验证:E-Mail,账号,出生日期,姓名...
热门文章
- 程序员必备技能-科学砍需求 1
- C++ Primer 第二章 学习笔记及习题答案
- is present but cannot be translated into a null value due to being declared as a primitive type
- iOS_GET_网络请求
- Python之冒泡排序和选择排序的比较
- hive-jdbc/odbc的解读和看法
- 网络管理员考试案例梳理、真题透解与强化训练
- 戴尔BIOS 爆多个高危漏洞,影响Inspiron 等数百万系统
- 成都睿铂x云南省地矿测绘院:丽江玉龙高精度地籍免像控案例分享
- XP远程桌面连接强制登录