2010-04-04 20 views
5

Bir XML dosyasından veri okuduğumu ve ayrıştırdığım bir program yazarım. Dosya, projemin src dizininde "Kaynaklar" adlı bir klasöre alınır. Eclipse kullanıyorum. Ben programı çalıştırdığınızda, aşağıdaki hatayı alıyorum:DosyaNotFoundException ayrıştırmak için .xml dosyası okunurken

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) 
... 

ilgili kod buradadır:

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

dosya varken ben FileNotFoundException alıyorum neden anlamıyorum. Yardım için teşekkürler.

+1

Bu sorun olmayabilir, ancak açıklamanızda "Kaynaklar" klasörünü aradığınızı ve kodun "kaynaklar" olduğunu unutmayın. Büyük/küçük harf duyarlı yollara sahip bir işletim sisteminde, bu bir soruna neden olabilir. – Ash

+0

Büyük harf bir yazım hatasıydı. Her iki yerde de "kaynaklar" var. – ericso

+0

Bu talimatı denediniz mi? System.getProperty ("user.dir") –

cevap

6

DocumentBuilder.parse(String) ile, argüman bir URI olarak yorumlanır ve bu durumda, göreceli bir URI olur (verdiğiniz dizi "tam" bir URI değildir). Bu noktada - arasındaki bağlantı, kurulumunuz hakkında daha fazla bilgi olmadan bu noktada biraz belirsizdir. Çalışma zamanı 'a göre yorumlanacak, ancak burada bir şeyin ne olduğu belli değil.

parse(File) veya parse(InputStream) gibi parse yöntemlerinden birini kullanarak daha güvenilir sonuçlar elde edersiniz. Her durumda, ayrıştırmak için sorduğunuz şey hakkında bir belirsizlik yoktur.

önce bir File nesneyi oluşturmak için karar verirseniz (daha sonra parse geçmek), o zaman bu dosya (böylece File.exists() ve kullanarak) varolduğunu sağlayarak bir daha yönetilebilir bir sorun var. Eğer bu kadar uzaklaşamıyorsanız, sorununuz DocumentBuilder veya DOM ile değil, temel dosya yollarıyla birlikte. Göreceli dosya yollarını (ör. new File("resources/majors_xml_db.xml")) kullanırsanız, işlemin çalışma dizinine göre çözüleceğini unutmayın. Çalışırsa veya programınızı nasıl başlattığınıza bağlı değilse.

+0

File f = new File("resources/majors_xml_db.xml"'u kullanarak bir File nesnesini yapmayı denedim. Ancak, daha önce olduğu gibi aynı problemle karşılaşıyorum. Anlamadığım şey, URI dizesini doğru şekilde nasıl biçimlendireceğidir. Dosyam, MacBook Pro'mdaki bir dizinde bulunuyor:/Users/thechiman/Dropbox/introcs/PSU SOC Paletli/kaynaklar/majors_xml_db.xml Eclipse'de, "src" dizini altında bir "kaynaklar" dizini oluşturdum projemin "Majors_xml_db.xml" dosyasını "kaynaklar" dosyasına yerleştirdim. Dosya oluşturma işlemini anlamıyorum. Lütfen yardım et. Teşekkürler. – ericso

+0

@thechiman: Düzenlenmiş yanıtı gör – skaffman

+0

Teşekkürler, bunu deneyeceğim. – ericso

İlgili konular