property父目录下(假设suncertify.properties亦位于此父目录)
运行
java suncertify.properties newProperty
无异常且属性已修改

解决方案 »

  1.   

    我知道,但是打包后
    运行
    java -jar property.jar newproperty是错的,请问要怎样改?(打包命令:
    jar cvfm property.jar MANIFEST.MF property suncertify.properties)
      

  2.   

    getResource还有一个变体:getResourceAsStream()都试一下
      

  3.   

    to  hiking():
            都试过了的
    to  www203(水户洋平):
            我不太懂你的意思。
      

  4.   

    在我印象当中jar会自动解压的,为什么我运行打包文件会找不到包里的properties文件呢?
      

  5.   

    File f = new File("./suncertify.properties");
      

  6.   

    打到包里后不能再按File一类的方式读,只能用Resource方式。package property;import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.Properties;public class Property {
        public static void main(String[] args) {
            Properties props = new Properties();
            String filename = "suncertify.properties";
            try {
                InputStream is = Property.class.getResourceAsStream(filename);
                props.load(is);
                System.out.println(props.getProperty("a"));
                System.out.println(props.getProperty("x"));
                OutputStream out = new FileOutputStream(filename);
                props.setProperty("a", "345345");
                props.setProperty("x", "23423");
                props.store(out, "mydoc");
                out.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
      

  7.   

    楼上方法已经测试,仍有java.lang.NullPointerException。按此修改已测试打包后运行成功:
    File f = new File("./suncertify.properties");
      

  8.   

    to usabcd(9号公路上的3名共军):
                   还是不对呀,你加我QQ415009052,把你打包运行成功的发给我.
      

  9.   

    to ntzls(三星堆) and usabcd(9号公路上的3名共军):
                                        你们怎么都不来了,郁闷......
      

  10.   

    我就这个水平:package property;
    import java.util.*;
    import java.net.*;
    import java.io.*;
    public class Property {
    public static void main(String[] args) {
    Properties props = new Properties();
    URL url =ClassLoader.getSystemClassLoader().getResource("suncertify.properties");
    try {
    InputStream is = url.openConnection().getInputStream();
    props.load(is);
    System.out.println(props.getProperty("a"));
         System.out.println(props.getProperty("x"));
                   OutputStream out=url.openConnection().getOutputStream();
    props.setProperty("a",args[0]);
    props.store(out,"mydoc");
    out.close();
    }
    catch (Exception e)
    {
    System.err.print(e);
    }
    System.out.println(props.getProperty("a"));
    System.out.println(props.getProperty("x"));
    }
    }改不了JAR中的文件abc
    xyz
    java.net.UnknownServiceException: protocol doesn't support outputabc
    xyz转载:把配置文件打包在 executable jar 裡應該沒有辦法讓正在運行的 Java application(in executable jar)寫回資料。一個 executable jar 一旦運行後,JVM 會打開 jar,你就沒有辦法去修改/刪除這個 executable jar 本身。通常放置在 jar 裡的配置文件都是包含一些必要且不能變更的組態,至於次要可有可無的組態則由應用程式運行時再另外建立組態檔,通常是建立在 user.home 目錄下。缺了這些在 jar 外的組態檔應用程式還是可以正常運行,就好像他是第一次被執行一般。 用ZipInputStream和ZipOutputStream進行了測試,發現把Jar文件修改後再寫到臨時文件是可行的,在進行寫到原文件時有點不太方便。
      

  11.   

    to ntzls(三星堆):
            还是谢谢你了,会送分给你的。在我印象当中运行jar包时会自动解压的,所以我的想法应该没错的。
      

  12.   

    难道没有一个人知道怎样对包里的properties文件进行读写吗?(知道的请把我的代码改对)
      

  13.   

    upupupupupupupupupupupupupupupupupupup
      

  14.   

    楼主。你还在折腾这个问题啊。可能你的概念有些模糊。
    打到包的文件是只读不写的。如果你的配置文件是比较固定的,可以打到包里去。
    然后用resource方式读取。读取时需要注意你打包时的相对路径。
    如果你需要在运行时修改这个配置文件,就不能把它打到包里去。应该在运行时用File一类的方式读取和更改。用File一类打开时,主目录就是你运行java程序的目录。
    我上面给你的例子可以读包的文件但不能写到包里去的。会在包外创建一个文件。
      

  15.   

    难道真的不能对jar包里的properties文件的值进行修改。
      

  16.   

    没错,真的不能对jar包里的properties文件的值进行修改。要改,就把他放到包外。