java swing项目打包获取不到配置文件路径

sunlight_rain 发布于 2016/06/14 17:12
阅读 542
收藏 0

java swing项目打包成jar包运行后获取不到图中xml配置文件,请教各位。谢谢。请问应该怎么存放配置文件和获取配置文件。

加载中
0
嗯哼_
嗯哼_


如图: 打包的时候把conf文件夹放到 跟jar包同级目录下就行了

0
zheng_pat
zheng_pat
InputStream in = ReadFile.class.getResourceAsStream("/com/lavasoft/res/a.txt"); 试试这个方法
0
sunlight_rain
sunlight_rain

引用来自“嗯哼_”的评论


如图: 打包的时候把conf文件夹放到 跟jar包同级目录下就行了

我用的是NetBeans开发的,我现在建了一个和src同级的目录config文件夹,我访问路径的代码如下:
private static final String fileUrl ="config/sysConfig.xml";
        
    /**
     * 获取系统配置信息
     * @return 
     */
    public static Object[] getSysConfig(){
        Object[] sysInfo=null;
        try {
             Document doc = saxreader.read(new FileInputStream(fileUrl));
             Node portNode = doc.selectSingleNode("config/port");
             String port = portNode.getText().trim();
             Node ipNode = doc.selectSingleNode("config/ip");
             String ip = ipNode.getText().trim();
             sysInfo= new Object[]{port,ip};
        } catch (DocumentException | FileNotFoundException ex) {
            Logger.getLogger(SysConfigUtils.class.getName()).log(Level.SEVERE, null, ex);
        }
        return sysInfo;
    }

打包后的文件如图:

运行后报错如图:

0
阿信sxq
阿信sxq

你参考下如下的代码

String path = ConfigFile.class.getProtectionDomain().getCodeSource()
       .getLocation().getPath();
 try {
    path = URLDecoder.decode(path, Charset.defaultCharset().name());
 } catch (UnsupportedEncodingException e) {}
 String filePath = new File(path).getParent() + File.separator + "file";
 InputStream input =new FileInputStream(filePath);



这个代码是实际使用的,具体还需要根据你自己的情况调整一下

阿信sxq
阿信sxq
回复 @sunlight_rain : 哦,对,忘记说了,我的这个配置文件是在jar以外的,你的配置文件如果要修改的话,也是需要放在jar外面的哦,否则修改不了
sunlight_rain
sunlight_rain
我试过这个,没用。
0
追梦的青春
直接读取配置文件就好,常规IO操作就可以。
0
嗯哼_
嗯哼_

引用来自“嗯哼_”的评论


如图: 打包的时候把conf文件夹放到 跟jar包同级目录下就行了

引用来自“sunlight_rain”的评论

我用的是NetBeans开发的,我现在建了一个和src同级的目录config文件夹,我访问路径的代码如下:
private static final String fileUrl ="config/sysConfig.xml";
        
    /**
     * 获取系统配置信息
     * @return 
     */
    public static Object[] getSysConfig(){
        Object[] sysInfo=null;
        try {
             Document doc = saxreader.read(new FileInputStream(fileUrl));
             Node portNode = doc.selectSingleNode("config/port");
             String port = portNode.getText().trim();
             Node ipNode = doc.selectSingleNode("config/ip");
             String ip = ipNode.getText().trim();
             sysInfo= new Object[]{port,ip};
        } catch (DocumentException | FileNotFoundException ex) {
            Logger.getLogger(SysConfigUtils.class.getName()).log(Level.SEVERE, null, ex);
        }
        return sysInfo;
    }

打包后的文件如图:

运行后报错如图:

我们这边的目录结构式这样的 你可以试着把jre 弄进来。

.bat文件 如下

set JAVA_HOME=.\jre\

set CLASS_PATH=./TrapServerCore.jar;./lib/AdventNetARUtils.jar;./lib/AdventNetSAS.jar;./lib/AdventNetSnmp.jar;./lib/AdventNetSnmpAgent.jar;./lib/AdventNetSNMPAgentTools.jar;./lib/AdventNetSnmpBeanInfo.jar;./lib/AdventNetSnmpDistributedAPI.jar;./lib/c3p0-0.9.1.1.jar;./lib/dom4j.jar;./lib/jcommon-1.0.20.jar;./lib/jfreechart-1.0.16.jar;./lib/log4j-1.2.16.jar;./lib/NmsServerClasses.jar;./lib/postgresql_jdbc4.jar;./lib/quartz-2.2.2.jar;./lib/quartz-jobs-2.2.2.jar;./lib/slf4j-api-1.7.7.jar;./lib/slf4j-log4j12-1.7.7.jar;./lib/snmp4j-2.3.1.jar;./lib/SNMPDebugger.jar

set PATH=.\lib\;%PATH%

%JAVA_HOME%\bin\java -cp %CLASS_PATH% -Djava.library.path="./lib" -Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:PermSize=128M -XX:MaxPermSize=128M -XX:+UseConcMarkSweepGC com.bdcom.bdirector.trapserver.ui.TrapConfigDlg



sunlight_rain
sunlight_rain
谢谢,我已经解决了。
0
milin
milin
如果配置文件在jar里面,只能用类加载器方式获取,外面类加载器或者文件都可以
返回顶部
顶部