2012-02-18 35 views
11

Tôi có cấu trúc dự án maven nơi tôi có tệp src/main/resources/json/test.xml hiện tại tôi đang cố gắng đọc điều này bằng cách sử dụng mã sau nhưng không thể đọc nó.I ma nhận được không thể tìm thấy tập tin specified.I phải vượt qua một đối tượng tập tin để chức năng unmarshal, làm thế nào tôi có thể làm điều này bằng apporach khácĐọc một tệp từ thư mục tài nguyên

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()); 

Trường hợp ngoại lệ là

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

bạn có thể đăng thông báo ngoại lệ không? – Rachel

+0

@Rachel -I đã thêm ngoại lệ –

Trả lời

18

thư mục nguồn lực được sáp nhập vào tạo ra các lớp thư mục của maven khi xây dựng. Vì vậy, bạn có thể nhận được một InputStream cho tập tin đó qua:

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

JAXB thể unmarshal từ InputStream s, và các tập tin nằm bằng cách sử dụng quy tắc tương tự như được sử dụng bởi các ClassLoader mà định nghĩa lớp YourClassName. (Xem getResourceAsStream để biết thêm thông tin.)

Các vấn đề liên quan