一般的做法 jar包里面是独立的组件,所以配置文件都不是对外使用的,而且我也很少见到有jar包里面的配置文件。
如果你非要这样使用,可以考虑实现一个类,读取jar包里面的配置信息,然后再外面调用这个类

解决方案 »

  1.   


    谢谢两位!!但我想你们没明白我的意思!!!
    我的所说的配置文件不是sun公司生成的配置文件。
    而是我们自己定义的文件,我们把一下可变的放到这些包中。
    然后让我们的程序去读去这些参数,这样也不会有包外调用的问题是包内的类文件调用包内自己定义的参数文件!!!!
      

  2.   

    如果用java.util.ResourceBundle就不用担心什么,它本来就是从class loader folder/jar文件里找properties文件。
    如果你已经注意到了,java取文件有两种方法,java.util.io和java.lang.ClassLoader两种。
    java.io:
       File file = new File("...");
       FileInputStream fis = new FileInputStream("...");
       FileReader fr = new FileReader("...");
    ClassLoader:
       ClassLoader loader = XXXClass.class.getClassLoader();
       or
       ClassLoader loader = Thread.currentThread().getContextClassLoader();
       URL url = loader.getResource("...");
       File file = new File(url.getFile());
       InputStream input = loader.getResourceAsStream("...");
    这两种,一种是从project loader folder取,一种是从class loader folder取,class loader folder包括jar文件。
    我想你应该明白了吧?自己写个程序test一下就知道了。
      

  3.   

    我觉得这些问题你可以不管
    有一些服务器r如weblogic就可以帮你处理这些问题。我们现在就是用jb将jar包打进ear包,由服务器处理就ok了。
      

  4.   

    to hayai(生命树) :
      我用了后一种方法(ClassLoader方法)运行时提示如下错误!!!
    the file path : file:/D:/tools/JarFileRead.jar!/jart.txt
    java.io.FileNotFoundException: file:\D:\tools\JarFileRead.jar!\jart.txt (文件名
    、目录名或卷标语法不正确。)
            at java.io.FileInputStream.open(Native Method)
            at java.io.FileInputStream.<init>(FileInputStream.java:103)
            at java.io.FileReader.<init>(FileReader.java:51)
            at JarFileRead.fileRead(JarFileRead.java:33)
            at JarFileRead.main(JarFileRead.java:55)请问是什么原因!!谢谢
      

  5.   

    File file = new File(url.getFile());不是用在你这种情况的。
    一般情况既然classloader已经拿到resource,就没有必要画蛇添足地再转成File.
    转成File事实上是为了拿到绝对路径,我们碰到过这么一种情况。
    一个Web application,用tomcat启动,tomcat会建一个application folder,folder下面有一个web-inf folder,再下面是classes目录,classes目录下面是所有的java classes.程序需要用一个property文件记录数据,用io package只能定位到绝对路径,用class loader可以是相对路径,不管tomcat在客户电脑上任何位置,但是,如果写文件在classes folder下面,tomcat会reload web server,页面会重载。为了定位到application folder,与web-inf并列,先用classloader,再转成file拿到全路径,去掉后面不需要的folder,就可以拿到tomecat建的web application的绝对路径。
    与你的情况不同的是,classloader定位到的文件,不在jar里头。我认为用java io不可以定到jar里面。
      

  6.   

    to hayai(生命树) :
      我试用了classloader的方法!!这中好像几能用来导入.class文件把!!
      请问怎么用classloader来导入其它的文件呢??比如文本文件
      

  7.   

    ??
    两种方式得到ClassLoader, 上面已经提过。
    loader.getResourceAsStream("...");
    Properties p;
    p.load(fis);
    p.getProperty("key", "default value");
      

  8.   

    我试用了classloader的方法!!这中好像几能用来导入.class文件把!!
      请问怎么用classloader来导入其它的文件呢??比如文本文件
    什么意思?
    ClassLoader retrieves files under Class Root folder, which is the classes folder in JBuilder and web application, which is also the jar file.
    XXXClass.class.getClassLoader() 和 Thread.getCurrentThread().getContextLoader()是为了拿不同的loader.
    在你的classes folder里,或者jar里面,有什么文件旧可以拿什么文件,谁说只能拿class文件?文件不在classes folder里,或jar里面,当然拿不到。
      

  9.   

    最好的办法就是使用getClass().getResourceAsStream()或getClassLoader().getResourceAsStream();将配置文件作为流读入.只要路径配置正确,这种读入方式
    是适应性最强的方式.
    另:基本上以流方式无所谓什么文本和非文本,一切自己处理.