我记得jar调用jar是需要在manifest.mf中进行class-path属性的设置,不知道xml是不是也需要类似的设置。

解决方案 »

  1.   

    当然打进去了,解压也可以看到xml文件
      

  2.   

    建议改为用ResourceBundle的方法来装载
      

  3.   

    要使用相当路径
    以下例子我做了测试。a、文件路径如下:
    f:\java\testjar.java
    f:\java\MANIFEST.MF
    f:\java\citi\sonnet.xml1、源文件
    //:testjar.java
    package citi;
    import java.io.*;
    public class testjar{
      public static void main(String[] args){
        try{
          BufferedReader in;
          String str;
          //由于文件sonnet.xml要打入包中,故文件应该在包路径“citi”中
          //使用时,需要使用相对路径来引用,如下面的".\\citi\\sonnet.xml"
          in = new BufferedReader(new FileReader(".\\citi\\sonnet.xml"));     
         while((str = in.readLine())!= null){
          System.out.println(str);
         }
         in.close();
        }catch(Exception e){e.printStackTrace();}
      }
    }2、文件sonnet.xml内容
    <?xml version="1.0"?>
    <sonnet type="Shakespearean">
      <author>tsc</author>
    </sonnet>3、文件MANIFEST.MF内容
    Manifest-Version: 1.0
    Main-Class: citi.testjar
    Created-By: tangshancheng4、操作步骤实例F:\java>javac testjar.java -d .F:\java>jar cvfm my.jar manifest.mf citi
    标明清单(manifest)
    增加:citi/(读入= 0) (写出= 0)(存储了 0%)
    增加:citi/testjar.class(读入= 707) (写出= 464)(压缩了 34%)
    增加:citi/sonnet.dtd(读入= 1165) (写出= 361)(压缩了 69%)
    增加:citi/sonnet.xml(读入= 91) (写出= 80)(压缩了 12%)F:\java>java -jar my.jar
    <?xml version="1.0"?>
    <sonnet type="Shakespearean">
      <author>tsc</author>
    </sonnet>
      

  4.   

    楼主最好使用this.getClass().getClassLoader().getResource()来装载,这样只要你的资源在ClassPath中,就一定能够找到。
      

  5.   

    testjar.class.getResource("sonnet.xml")
    或者
    ClassLoader.getSystemResource("citi/sonnet.xml")