2010-04-04 42 views
5

Tôi đang viết một chương trình bằng Java mà tôi đã đọc trong dữ liệu từ một tệp XML và phân tích nó. Tệp được nhập vào một thư mục có tên "Tài nguyên" trong thư mục src của dự án của tôi. Tôi đang sử dụng Eclipse. Khi tôi chạy chương trình, tôi nhận được lỗi sau:FileNotFoundException khi đọc tệp .xml để phân tích cú pháp

java.io.FileNotFoundException: /Users/thechiman/Dropbox/introcs/PSU SOC Crawler/resources/majors_xml_db.xml (No such file or directory) 
at java.io.FileInputStream.open(Native Method) 
at java.io.FileInputStream.<init>(FileInputStream.java:106) 
at java.io.FileInputStream.<init>(FileInputStream.java:66) 
... 

Mã liên quan là ở đây:

private void parseXML() { 
    //Get a factory 
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 

    try { 
     //Use factory to get a new DocumentBuilder 
     DocumentBuilder db = dbf.newDocumentBuilder(); 

     //Parse the XML file, get DOM representation 
     dom = db.parse("resources/majors_xml_db.xml"); 
    } catch(ParserConfigurationException pce) { 
     pce.printStackTrace(); 
    } catch(SAXException se) { 
     se.printStackTrace(); 
    } catch(IOException ioe) { 
     ioe.printStackTrace(); 
    } 
} 

Tôi không hiểu tại sao tôi nhận được FileNotFoundException khi tập tin là có. Cảm ơn đã giúp đỡ.

+1

Điều này có thể không phải là một vấn đề, nhưng tôi nghĩ rằng trong mô tả của bạn, bạn đã gọi thư mục "Tài nguyên" và trong mã là "tài nguyên". Trên hệ điều hành có đường dẫn phân biệt chữ hoa chữ thường, điều này có thể gây ra sự cố. – Ash

+0

Viết hoa là lỗi đánh máy. đó là "tài nguyên" ở cả hai nơi. – ericso

+0

Bạn đã thử sử dụng hướng dẫn này chưa? System.getProperty ("user.dir") –

Trả lời

6

Với DocumentBuilder.parse(String), đối số được hiểu là URI và trong trường hợp này, nó sẽ là URI tương đối (chuỗi bạn đang cung cấp không phải là URI "đầy đủ"). Điều gì là tương đối đến hơi mơ hồ vào thời điểm này, mà không cần thêm thông tin về thiết lập của bạn. Thời gian chạy sẽ giải thích nó là tương đối với một cái gì đó, nhưng nó không rõ ràng ở đây những gì mà một cái gì đó.

Bạn sẽ nhận được kết quả đáng tin cậy hơn bằng cách sử dụng một trong các phương pháp parse khác, chẳng hạn như parse(File) hoặc parse(InputStream). Trong mỗi trường hợp, không có sự mơ hồ về những gì bạn đang yêu cầu nó phân tích cú pháp.

Nếu bạn quyết định xây dựng một đối tượng File trước tiên (để chuyển sang parse sau), thì bạn có vấn đề dễ quản lý hơn để đảm bảo tệp đó tồn tại (sử dụng File.exists() và v.v.). Nếu bạn không thể đạt được điều đó, thì vấn đề của bạn không phải là với DocumentBuilder hoặc DOM, nó có đường dẫn tệp cơ bản. Hãy nhớ rằng nếu bạn sử dụng đường dẫn tệp tương đối (ví dụ: new File("resources/majors_xml_db.xml")) thì điều này sẽ được giải quyết liên quan đến thư mục làm việc của quy trình. Nếu nó hoạt động hay không phụ thuộc vào cách bạn khởi động chương trình của bạn.

+0

Tôi đã thử tạo đối tượng Tệp bằng cách sử dụng File f = new File("resources/majors_xml_db.xml". Tuy nhiên, tôi chạy vào cùng một vấn đề như trước. Tôi đoán những gì tôi không hiểu là làm thế nào để định dạng đúng chuỗi URI. Tệp của tôi được đặt tại thư mục trên MacBook Pro của tôi:/Người dùng/thechiman/Dropbox/introcs/PSU SOC Crawler/resources/majors_xml_db.xml Trong Eclipse, tôi đã tạo một thư mục "tài nguyên" trong thư mục "src" của dự án của tôi. Tôi đã đặt tệp "majors_xml_db.xml" trong tệp "tài nguyên". Tôi không hiểu cách tạo tệp. Hãy giúp tôi. Cảm ơn. – ericso

+0

@thechiman: Xem câu trả lời đã chỉnh sửa – skaffman

+0

Cảm ơn, tôi sẽ thử điều đó. – ericso

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