2012-02-18 15 views
11

私はsrc/main/resources/json/test.xmlファイルが存在するmavenプロジェクト構造を持っています。次のコードを使用してこのファイルを読み込もうとしていますが、読み込めません。私はこの使用して他のapporachに行うことができますどのようにリソースフォルダからファイルを読み取る

File file = new File("json\\test.xml"); 
      JAXBContext jaxbContext = JAXBContext.newInstance(ServiceApi.class); 

      Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 
      ServiceApi customer = (ServiceApi) jaxbUnmarshaller.unmarshal(file); 
      System.out.println(customer.getService().size()); 

例外はresourcesフォルダがにマージされ

javax.xml.bind.UnmarshalException 
- with linked exception: 
[java.io.FileNotFoundException: C:\Users\jayesh_shah\Downloads\dbt-dataformstub\json\test.xml (The system cannot find the path specified)] 
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:202) 
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:173) 
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:137) 
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:142) 
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:151) 
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:169) 
    at com.ge.stub.api.jaxb.JAXBExample.main(JAXBExample.java:17) 
Caused by: java.io.FileNotFoundException: C:\Users\jayesh_shah\Downloads\dbt-dataformstub\json\test.xml (The system cannot find the path specified) 
    at java.io.FileInputStream.open(Native Method) 
    at java.io.FileInputStream.<init>(FileInputStream.java:120) 
    at java.io.FileInputStream.<init>(FileInputStream.java:79) 
    at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:70) 
    at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:161) 
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:653) 
    at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:186) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:772) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737) 
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119) 
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205) 
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522) 
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:200) 
    ... 6 more 
+0

例外メッセージは投稿できますか? – Rachel

+0

@Rachel - 例外が追加されました –

答えて

18

で、アンマーシャリング機能へのファイルオブジェクトを渡す必要がspecified.Iファイルを見つけることができません取得ビルド時にmavenで生成されたクラスフォルダ。だから、あなたが使ってそのファイルのInputStreamを取得することができます。

InputStream is = YourClassName.class.getResourceAsStream("/json/test.xml"); 

JAXBはInputStream sから非整列化することができ、およびファイルは、クラスYourClassNameを定義しClassLoaderで使用されるのと同じ規則を使用して位置しています。 (詳細についてはgetResourceAsStreamを参照してください)

関連する問題