在JAR中使用属性文件

时间:2013-04-04 03:33:56

标签: properties jar filenotfoundexception

在很多属性文件文章和评论之后我真的迷失了。

我想要的只是检索值并覆盖它们 - 我想将它与jar文件一起使用。

如果我在eclipse中编译它可以很好地工作但是在编译的那一刻我得到了着名的“找不到属性文件”-exception。

FileInputStream in = new   FileInputStream(ClassLoader.getSystemResource("client.properties").getPath()); 
Properties props = new Properties();
        props.load(in);
        in.close();

我得到的例外情况如下:

C:\Users\thomas\Desktop>java -jar erp_auer_client_v0_1.jar
java.io.FileNotFoundException: file:\C:\Users\thomas\Desktop\erp_auer_client_v0_
1.jar!\client.properties (Die Syntax f³r den Dateinamen, Verzeichnisnamen oder d
ie Datentrõgerbezeichnung ist falsch)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(Unknown Source)
        at java.io.FileInputStream.<init>(Unknown Source)
        at global_functions.helperFunctions.getPathBARTENDEREXE(helperFunctions.
java:361)
        at client.programmeinstellungen.ProgrammEinstellungenManagement.<init>(P
rogrammEinstellungenManagement.java:59)
        at client.main.MainOverview$11.mousePressed(MainOverview.java:275)

德国部分(Die Syntax f,rd Dateinamen,Verzeichnisnamen oder d     即Datentrõgerbezeichnungist falsch)表示“文件名,目录名称或磁盘名称的语法错误”。

你知道那可能是什么吗?

1 个答案:

答案 0 :(得分:0)

好吧,我亲自尝试过,并意识到它比我最初想象的要复杂一些。但是,我认为在你的场景中你可以使用类似下面的东西。我在Windows和Linux中测试过并且对我很好:

package mypackage;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.net.URISyntaxException;
import java.util.Date;
import java.util.Properties;

public class MyMainClass {

    public static void main(String[] args) throws URISyntaxException {
        /*
         * 
         * MyMainClass.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath();
         * In Linux it returns null
         * 
         * ClassLoader.getSystemClassLoader().getResource(".").getPath() + "MyProperty.properties";
         * In Linux it returns {JRE_PATH}/lib/ext/pulse-java.jar
         * In Windows it returns {JAR_FILE_PATH}
         */

        String propertyFilePath = "MyProperty.properties";
        Properties props = new Properties();
        try {
            FileInputStream in = new   FileInputStream(propertyFilePath); 
            props.load(in);
            in.close();
        } catch (Exception e) {
            File f = new File(propertyFilePath);
            System.err.println("Could not read file: " + f.getAbsolutePath());
        }

        System.out.println("Fetching property value of [now]: " + props.get("now"));
        String now = new Date().toString();
        System.out.println("Storing property [now]: " + now);
        props.setProperty("now", now);

        try {
            OutputStream out = new FileOutputStream(propertyFilePath); 
            props.store(out, "Saving value of [now]");
        } catch (Exception e) {
            File f = new File(propertyFilePath);
            System.err.println("Could not write file: " + f.getAbsolutePath());
        }
    }
}