精华内容
下载资源
问答
  • 很多时候,我们都将配置文件放在eclipsesrc目录,这个位置,相当于,当导出可执行jar包后,配置文件放在和jar同级目录中,比如jar包放在/opt目录,则配置文件放在/opt,则jar包就可以读取配置文件内容...

    很多时候,我们都将配置文件放在eclipse的src目录下,这个位置,相当于,当导出可执行jar包后,配置文件放在和jar同级的目录中,比如jar包放在/opt目录下,则配置文件放在/opt下,则jar包就可以读取配置文件中的内容。此时,java代码中可以通过

    String path=CommonOperation.class.getResource("/").getPath();

    FileInputStream fin = new FileInputStream(path+"Config.properties");

    来读取配置文件。

    但要注意,用这种方法在eclipse下调试程序的时候,会发现使用setProperty(String  key ,String value)无法修改配置文件的内容,原因是 eclipse在编译文件时,已经把配置文件复制到工程的bin目录下了,修改其实已经保存在bin目录下的那个配置文件里面了。

    java读取配置文件内容的代码如下:

    String path=CommonOperation.class.getResource("/").getPath();

    InputStream fis = new FileInputStream(path+"Config.properties");

    Properties prop = new Properties();

    prop.load(fis);

    fis.close();

    return prop.getProperty(key);

    java修改配置文件内容的代码如下:

    Properties props = new Properties();

    String path=CommonOperation.class.getResource("/").getPath();

    FileInputStream fin = new FileInputStream(path+"Config.properties");

    props.load(fin); //load file

    fin.close();

    props.setProperty(key,value);

    OutputStream fout = new FileOutputStream(path+"Config.properties");

    props.store(fout, "dd");//save file

    fout.close();

    展开全文
  • private static Properties getProps(String fileName){ Properties properties = new Properties();... //读取当前 jar 包存放路径 String path = System.getProperty("user.dir"); // System...

    说明:将java的部分配置文件写在外部,可动态进行修改此类配置文件,以适用不同的环境运行。

    private static Properties getProps(String fileName){
    
            Properties properties = new Properties();
            //读取当前 jar 包存放的路径
            String path = System.getProperty("user.dir");
    //        System.out.println(path);
            //判断文件是否存在
            InputStream input = null;
            try {
            	//读取当前文件夹下config文件目录下的配置文件
                input = new FileInputStream(new File(path+File.separator+"config"+File.separator+fileName));
            } catch (FileNotFoundException e) {
                System.out.println("jdbc.properties not find. " + e);
            }
            if (input != null) {
                try {
                    properties.load(input);
                } catch (IOException e) {
                    System.out.println("fail to load the jdbc.properties," + e);
                }
            }
            return properties;
        }
    
    展开全文
  • 在使用 jar 执行 java 代码时,有一个需求是从 jar 包所在目录同级目录读取配置文件的需求,从网上找了很多方法感觉都挺复杂,在这里总结一下.以classpath 开头 URL 表示该文件为jar包内文件路径.如:...

    在使用 jar 执行 java 代码时,有一个需求是从 jar 包所在目录的同级目录下读取配置文件的需求,从网上找了很多方法感觉都挺复杂的,

    在这里总结一下.

    以classpath 开头的 URL 表示该文件为jar包内文件的路径.

    如:classpath://config/app.config表示jar包根路径config文件夹下的app.config文件

    以file开头的URL表示该文件为jar 包外文件的路径

    如:file://./config/app.config表示

    摘要

    // 当前我想从jar包的同级目录下读取一个名为 'config.txt'的文件的话,我需要指定目录为.

    File file = new File(".","config.txt")

    说明

    File file = new File("config.txt")

    当只包含文件名称时,java程序会默认尝试从jar包的根路径去读取文件,当尝试使用 file.getCanonicalPath() 方法读取时,便会得到该文件在jar包内的路径.

    示例

    我当前的工程的路径为D:\WorkSpace\path_demo01\

    在工程执行以下java代码:

    当指定parent时:

    会从parent下查找path资源.

    log(FileUtil.file(".", "/config/app.config").getCanonicalPath());

    log(FileUtil.file(".", "config/app.config").getCanonicalPath());

    // D:\WorkSpace\path_demo01\config\app.config

    //加载与当前jar包同级目录下的文件

    log(FileUtil.file(".", "app.config").getCanonicalPath());

    当没有指定parent:

    如果path为绝对路径时,会从绝对路径下查找

    如果path为相对路径时,会从classpath的根路径下开始查找

    log(FileUtil.file("/config/app.config").getCanonicalPath());

    // D:\config\app.config

    log(FileUtil.file("config/app.config").getCanonicalPath());

    // D:\WorkSpace\path_demo01\target\classes\config\app.config

    通过当前类加载资源:

    如果path为相对路径会指定要加载的资源路径与当前类所在包的路径一致

    如果path为绝对路径,那么就会从classpath的根路径下开始查找

    log(App.class.getResource("/config/app.config"));

    // file:/D:/WorkSpace/path_demo01/target/classes/config/app.config

    log(App.class.getResource("config/app.config"));

    // file:/D:/WorkSpace/path_demo01/target/classes/top/ghimi/config/app.config

    通过类加载器加载资源:

    默认是从ClassPath根下获取,path不能以/开头,最终是由ClassLoader获取资源.

    log(App.class.getClassLoader().getResource("/config/app.config"));

    // null

    log(App.class.getClassLoader().getResource("config/app.config"));

    // file:/D:/WorkSpace/path_demo01/target/classes/config/app.config

    加载jar包内的资源

    当代码打包成jar包的形式后,是无法通过new File()的形式加载jar包内的资源的.此时有可能抛出

    FileNotFoundException异常,是由于将path当成jar包外的目录查找不到资源导致的.

    URI is not hierarchical异常,是由于无法直接读取jar包中资源(透明)而抛出的异常.

    解决方法:

    使用 getResourceAsStream()方法直接获取资源的流而不是getResource()获取资源文件对象的方式读取资源.

    //修改前,未打包成jar包时能够正常执行,打包后会抛出异常

    log(App.class.getClassLoader().getResource("config/app.config"));

    // 修改后,打成jar包后也可以正常加载资源

    log(App.class.getClassLoader().getResourceAsStream("config/app.config"));

    加载jar包外的资源

    会从parent目录下查找path资源.

    //加载与当前jar包同级目录下的文件

    log(FileUtil.file(".", "app.config").getCanonicalPath());

    // D:\WorkSpace\path_demo01\app.config

    //加载与当前jar包的上一级目录下的文件

    log(FileUtil.file("..", "app.config").getCanonicalPath());

    // D:\WorkSpace\app.config

    借用工具hutool:

    cn.hutool

    hutool-all

    4.5.6

    补充知识:java中jar包内的类访问jar包内部的资源文件的路径问题

    在本地项目中,若我们要访问项目中的资源文件,则一般使用相对路径或者用System.getProperities("user.dir")得到项目根目录,然后再访问资源文件,但是在将该工程和资源文件打包为jar包,运行该jar文件时,会显示找不到资源文件的错误。

    在如下项目结构树中,项目根目录为nlpir,如果我们要在src下的某个package的某个java文件中访问blackWhite文件夹中的文件,则相对路径为"blackWhite/....."即可。但是在打包为jar包时,即使我们把blackWhite文件夹同样加入到打包的文件行列,在运行该jar包时,会出错:找不到blackWhite中某文件的路径。

    8ca44fc4bcdd12909a6b000fb8b07972.png

    解决方法:

    使用Class.getResource或者是ClassLoader.getResourceAsStream()将文件内容放到InputStream中,具体使用如下:

    String s1 = this.getClass().getResource("/library.properties").getPath();

    或者为:

    String s1 = CodeTest.class.getResource("/library.properties").getPath();

    注意,使用class的getRescource时,要注意路径前要加"/",即根目录,此处的根目录是src

    若像如下使用:

    String class_str = this.getClass().getResource("logback.xml").getPath();

    则会出错如下:

    3190490f9571faa8a29ebfea9845753f.png

    使用ClassLoader时,如下:

    this.getClass().getClassLoader().getResource()

    在使用ClassLoader时,路径前面不能加"/",使用相对路径。

    如下示例:

    @Test

    public void test4(){

    String class_str = this.getClass().getResource("/logback.xml").getPath();

    String class_str2 = TempTest.class.getResource("/logback.xml").getPath();

    String classLoader_str = this.getClass().getClassLoader().getResource("logback.xml").getPath();

    InputStream is = this.getClass().getClassLoader().getResourceAsStream("logback.xml");

    System.out.println(class_str);

    System.out.println(class_str2);

    System.out.println(classLoader_str);

    System.out.println(is == null );

    }

    结果如下:

    bd8eba3ec3b4668186b18e2b65da2277.png

    String ss = TempTest.class.getResource("/").getPath();

    上述该代码得到的是项目的根目录,即nlpir的根目录,结果如下:

    /C:/eclipse/eclipse/workspace/nlpir/out/production/nlpir/

    如下代码:

    @Test

    public void readProperties(){

    String ss = TempTest.class.getResource("/").getPath();

    System.out.println(ss);

    String s = new File(ss).getParentFile().getPath();

    System.out.println(s);

    String system_str = System.getProperty("user.dir");

    System.out.println(system_str);

    }

    运行结果如下:

    38f6c58fba5576acfc7e48e6a7a56bb3.png

    其中,File.getParentFile()可用于求父目录

    将上述readProperties函数打包为jar包在命令行使用java -jar TempTest.jar运行时,结果如下:

    a732c4453d29e08af7f2b8f73e000453.png

    由此可见,打包成jar包时和在ide中直接运行的结果并不一样,所以在jar包中的class类要访问自己jar包中的资源文件时,应该使用Class.getResource或者是getResourceAsStream放在InputStream中,再进行访问。但是该方法只能访问到src下的资源文件,因为其根目录对应的就是src,无法访问到项目根目录下src外的文件,如上述项目结构图中的blackWhite中的文件无法访问到,解决方法还木有找到。。。。。。

    当jar包外部的类需要访问某个jar包的资源文件时,使用JarFile类,

    具体使用方法如下:

    如果你对于常用的ZIP格式比较熟悉的话,JAR文件也就差不多。JAR文件提供一种将多个文件打包到一个文件中的方法,其中每一个文件可能独立地被压缩。JAR文件所增加的内容是manifest,它允许开发者可以提供附加的关于内容的信息。例如,manifest表明JAR文件中的哪个文件是用来运行一个程序的,或者库的版本号等。

    J2SEDK提供了一个JAR工具,你可以用它从控制台读写JAR文件。然而,如果你需要在程序中代码读写JAR文件,可能需要一点时间(本文只包含如何在程序中读写JAR文件)。好消息是你可以做到这一点,而且你不用担心解压的事,因为类库将帮助你完成这些。

    首先,通过把将JAR文件位置传给构造函数,创建一个JarFile的实例,位置可能是String或File的形式,如下:

    JarFile jf = new JarFile("C:/jxl.jar");

    或者为:

    File file = new File("C:/jxl.jar");

    JarFile jarFile = new JarFile(file);

    你可能注意到当文件不在class path中时,JarFile类对于从JAR中读取文件文件是很有用的。当你想指定目标JAR文件时,JarFile类对于从JAR中读取文件同样也很有用。

    当然,如果JAR文件在class path中,从其中读取文件的方法比较简单,你可以用下面的方法:

    URL url = ClassLoader.getSystemResource(name);

    或者为:

    InputStream stream =

    ClassLoader.getSystemResourceAsStream("javax/servlet/LocalStrings_fr.properties");

    当你有了该JAR文件的一个引用之后,你就可以读取其文件内容中的目录信息了。JarFile的entries方法返回所有entries的枚举集合 (Enumeration)。通过每一个entry,你可以从它的manifest文件得到它的属性,任何认证信息,以及其他任何该entry的信息,如它的名字或者大小等。

    Enumeration enu = jf.entries();

    while (enu.hasMoreElements()) {

    JarEntry element = (JarEntry) enu.nextElement();

    String name = element.getName();

    Long size = element.getSize();

    Long time = element.getTime();

    Long compressedSize = element.getCompressedSize();

    System.out.print(name+"/t");

    System.out.print(size+"/t");

    System.out.print(compressedSize+"/t");

    System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(new Date(time)));

    }

    为了从JAR文件中真正读取一个指定的文件,你必须到其entry的InputStream。这和JarEntry不一样。这是因为JarEntry只是包含该entry的有关信息,但是并不实际包含该entry的内容。这和File和FileInputStream的区别有点儿相似。访问文件没有打开文件,它只是从目录中读取了该文件的信息。

    下面是如何得到entry的InputStream:

    InputStream input = jarFile.getInputStream(entry);

    当你有了输入流,你就可以像读取其他流一样读取它。在文本流中(text stream),记得使用读取器(Reader)从流中取得字符。对于面向字节的流,如图片文件,直接读取就行了。

    示例:

    下面的程序演示如何从JAR文件中读取文件。指定JAR文件的名称,要读取的文件的名称(打包JAR文件中的某一个文件)作为参数来调用该程序。要读取的文件应该有一个文本类型的。

    import java.io.*;

    import java.util.jar.*;

    public class JarRead {

    public static void main (String args[])

    throws IOException {

    if (args.length != 2) {

    System.out.println(

    "Please provide a JAR filename and file to read");

    System.exit(-1);

    }

    JarFile jarFile = new JarFile(args[0]);

    JarEntry entry = jarFile.getJarEntry(args[1]);

    InputStream input = jarFile.getInputStream(entry);

    process(input);

    jarFile.close();

    }

    private static void process(InputStream input)

    throws IOException {

    InputStreamReader isr =

    new InputStreamReader(input);

    BufferedReader reader = new BufferedReader(isr);

    String line;

    while ((line = reader.readLine()) != null) {

    System.out.println(line);

    }

    reader.close();

    }

    }

    假设在myfiles.jar文件中有一个spider.txt文件,spider文件的内容如下:

    The itsy bitsy spider

    Ran up the water spout

    Down came the rain and

    Washed the spider out

    可以通过下面的命令在命令行来显示该文本文件的内容:

    java JarRead myfiles.jar spider.txt

    以上这篇Java 获取 jar包以外的资源操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

    展开全文
  • 一般在服务器上部署项目时是一个jar包 旁边放置一个配置文件的文件夹conf,如图所示 , 在IDEA中结构如上所示     那么怎么做到在IDEA中写代码能加载配置文件,同时放到服务器上不用修改代码呢? 下面...

    lyzx_hero

    一般在服务器上部署项目时是一个jar包  旁边放置一个配置文件的文件夹conf,如下图所示 ,  在IDEA中结构如上所示

     

     

    那么怎么做到在IDEA中写的代码能加载配置文件,同时放到服务器上不用修改代码呢?

    下面介绍两种方式

    package com.lyzx.test;
    
    import java.io.File;
    
    public class T3 {
        public static void main(String[] args){
            String domain_path = T3.class.getProtectionDomain().getCodeSource().getLocation().getPath();
            String file_path = new File("").getAbsolutePath();
    
            System.out.println("通过domain方式获取的jar包的绝对路径(包含jar包的名字)="+domain_path);
            System.out.println("通过file相对路径的方式获取的绝对路径(不包含jar包的名字)="+file_path);
    
            //在服务器端时,domain方式获取的路径带有jar包的名字,此时需要做处理
            if(domain_path.endsWith(".jar")){
                domain_path = domain_path.substring(0,domain_path.lastIndexOf(File.separator));
                System.out.println("domain方式服务器端处理后(去掉jar包名)的绝对路径=>"+domain_path);
            }
    
            /**
             * 下面是三种优雅的加载配置文件的方式
             * 个人推荐第一种
             */
            File file0 = new File("conf" + File.separator + "log4j.properties");
            System.out.println("通过file相对路径的方式加载配置文件::"+file0.getAbsolutePath()+"            "+file0.exists());
    
    
            File file1 = new File(file_path + File.separator + "conf" + File.separator + "log4j.properties");
            System.out.println("通过file绝对路径的方式加载配置文件::"+file1.getAbsolutePath()+"            "+file1.exists());
    
            //通过这种方式读取的是编译后的位置的配置文件,在IDEA中需要在 target/classes 下放置配置文件的文件夹以及文件
            File file2 = new File(domain_path + File.separator + "conf" + File.separator + "log4j.properties");
            System.out.println("通过domain的绝对路径加载配置文件::"+file2.getAbsolutePath()+"        "+file2.exists());
        }
    }

    本地测试结果如下:

    服务器测试结果如下:

    ok ,完美解决问题!

    展开全文
  • Java获取jar包以外资源方法发布时间:2020-08-19 10:08:32来源:亿速云阅读:234作者:小新小编给大家分享一下Java获取jar包以外资源方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!...
  •  test和test2 资源目录有相同的配置文件(/META/prop.properties)  testDemo 为获取配置文件的工程; testDemo代码: import java.io.*; import java.net.URL; import java.util.E...
  • java获取resource目录下的文件

    千次阅读 2018-07-31 12:15:24
    我们通常需要获取resource目录下的文件如配置文件,用于进行相应的数据获取。在WEB程序里面的jar、resources都是由Tomcat内部来加载的,所以你在代码中动态加载jar、资源文件的时候,首先应该是使用 Thread.current...
  • 在使用 jar 执行 java 代码时,有一个需求是从 jar 包所在目录同级目录读取配置文件的需求,从网上找了很多方法感觉都挺复杂,在这里总结一下.>以classpath 开头 URL 表示该文件为jar包内文件路径. 如:...
  • Java 如何获取 jar 包外资源

    千次阅读 2019-04-11 17:34:16
    在使用 jar 执行 java 代码时,有一个需求是从 jar 包所在目录同级目录读取配置文件的需求,从网上找了很多方法感觉都挺复杂,在这里总结一下. 摘要 // 当前我想从jar同级目录读取一个名为 'config.txt'...
  • 有时候,我们在编写java程序时候,都是把一些可配置写到配置文件里,但是不能跟项目一起打包,因为配置文件可能会需要经常修改,所以最好能在同级目录。项目结构如下可以看到,app.properties在同级目录,...
  • 有时候,我们在编写java程序时候,都是把一些可配置写到配置文件里,但是不能跟项目一起打包,因为配置文件可能会需要经常修改,所以最好能在同级目录。项目结构如下可以看到,app.properties在同级目录,...
  • 有时候,我们在编写java程序时候,都是把一些可配置写到配置文件里,但是不能跟项目一起打包,因为配置文件可能会需要经常修改,所以最好能在同级目录。项目结构如下可以看到,app.properties在同级目录,...
  • 将自身部分功能打成jar...使用方式:开发时直接读取项目资源目录下的 properties即可打成jar包使用时,将配置文件jar包放置在同一目录代码:import java.io.File;import java.io.FileInputStream;import java.io.F...
  • JAVA编写配置文件的几种方式:JAVA配置文件,一般都放在resource目录,无论是下面提到的properties、yml还是普通的...1、properties文件配置文件里面写好你要用的配置值:创建获取properties对象的函数:public s...
  • Java开发可执行jar包中,常需要获取jar文件所在目录。比如访问同一目录下配置文件等 以下是本来摸索出方法: String root = System.class.getResource("/").getPath(); try { return URLDecoder.decode(new...
  • 把外包jar的信息写在配置文件中,这样如果外部jar改变了,只需要修改properties相应的配置即可。config.properties文件内容如下jarUrl=E:/MessageSend.jarclassName=org.linewell.message.MessageSendmethodName=...
  • 最近在做项目的时候,自己写了一些配置参数的读取,将配置文件放到具体的位置,然后让程序根据当前类的路径寻找配置文件的路径,但是,发现eclipse的开发坏境下是可以顺利读取到指定路径下的配置文件中的配置参数的...
  • 前言:在写代码的时候,经常会遇到一些配置包路径的代码,然后框架根据提供的包路径进行扫描,...第二种是扫描jar包中的包路径,这时候需要使用JarURLConnection类了,这个可以将Jar包中目标包路径下的文件生成一个...
  • 1. 获取jar包同级目录配置文件 // 获取jar包路径 ApplicationHome home = new ApplicationHome(RabbitMQService.class); File jarFile = home.getSource(); String rootPath = jarFile.getParent(); 2. 获取执行jar...
  • 最近在做项目的时候,自己写了一些配置参数的读取,将配置文件放到具体的位置,然后让程序根据当前类的路径寻找配置文件的路径,但是,发现eclipse的开发坏境下是可以顺利读取到指定路径下的配置文件中的配置参数的...
  • 将自身部分功能打成jar...使用方式:开发时直接读取项目资源目录下的 properties即可打成jar包使用时,将配置文件jar包放置在同一目录代码:import java.io.File;import java.io.FileInputStream;import java.io.F...
  • 记录一个坑,公司中有个业务需求要获取 resources 下的配置文件中的配信息。正常编码时通过 String filePath = XXX.class.getClassLoader().getResource("xxx.xx").getPath(); File f = new File(filePath) 是...
  • 标签:urljdb函数artifact获取文件dependhar配置tool场景:单纯打jar包时输入json参数必须是转义过,很麻烦,直接从文件中读取不需要手动转义1、加入pom文件cn.hutoolhutool-all5.3.52、配置setting文件,如(同理...
  • 前言:在写代码的时候,经常会遇到一些配置包路径的代码,然后框架根据提供的包路径进行扫描,...第二种是扫描jar包中的包路径,这时候需要使用JarURLConnection类了,这个可以将Jar包中目标包路径下的文件生成一个...
  • java获取服务器信息

    千次阅读 2017-01-16 10:42:51
    java获取服务器信息需要用到sigar.jar,但该jar在linux依赖于libsigar-amd64-linux.so、libsigar-x86-linux.so。在window依赖于sigar-amd64-winnt.dll、sigar-x86-winnt.dll。配置文件这存在这模拟系统命名...
  • Linux下java使用Sigar的配置

    千次阅读 2015-07-20 16:14:35
    hyperic-sigar-1.6.4\sigar-bin\lib拷贝出需要的jar包(sigar.jar)和so文件(libsigar-amd64-linux.so,libsigar-x86-linux.so) 我是64位linux系统,若是32位请选择libsigar-x86-linux.so 将jar包导入...
  • 本文介绍如何通过Java程序代码获取Excel中超链接,可获取超链接所在单元格坐标位置、超链接显示文本、超链接屏幕提示词、超链接地址、超链接类型等等。程序中导入了spire.Xls.jar(这里使用其免费版的jar包),可...
  • Java学习笔记之获取当前目录或文件

    千次阅读 2014-11-13 09:59:44
    近来在项目中遇到一个关于获取项目目录下配置文件的问题?在eclipse中可以正确获取配置文件,但是当项目打包成jar包后就出现"找不到文件"异常。特此研究了一下java获取当前目录和获取项目中文件方法。 实验...

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 311
精华内容 124
关键字:

java获取jar下的配置文件

java 订阅