2011-11-24 8 views
13

Olası Çoğalt:
How do I read a resource file from a Java jar file?bir .jar dosyası içinde bir dosya erişme

saat googling sonra tamamen deli bunun üstesinden gelme başlatılıyor. Ayrıca, sitede soruların varyasyonlarını gördüm, ancak çalışmayı başaramıyorum. Bir JFrame ini dosyasındaki verileri okumalı ve söz konusu dosyayı açmak için bir yöntem oluşturdum. Söz konusu dosya bir kavanoz dosyası içindeki kaynaklar olarak adlandırılan bir klasörde saklanır. Tabii

private BufferedReader openIniFile(String filename){ 
    BufferedReader brReader = null;     
    try{ 
     File fileObj = new File(this.getClass().getResource("/resources/" + filename).toURI()); // The fileobject of the file to read 
     if(fileObj.exists())            
      brReader = new BufferedReader(new FileReader(fileObj));      

    } catch(Exception e){ 
     System.err.println("Exception while opening file: " + e.getMessage()); 

    } 

    return null; 
} 

Bu benim derleme sonra kod koşturup dururken mükemmel çalışıyor, ancak bir .jar dosyasına ihraç edildikten sonra bir istisna atar. InputStream, FileInputStream kullanarak baktım ama işe yarayacak bir çözüm bulamıyorum.

Kavanoz kütüğünün kaynağı nasıl tanımasını sağlayabilirim?

+0

ben o çalışma alamadım, o çalıştı :( – Chrizmo

+0

bu konuda çok –

+0

Maalesef yardımcı olmuyor "o çalışma alamadım". Hâlâ boş bir istisna atar. – Chrizmo

cevap

19

Kaynağınız JAR dosyasında olduğunda, artık bir Dosya değil. Bir dosya, dosya sistemindeki sadece fiziksel bir dosyadır. Çözüm: getResourceAsStream kullanın. Buna benzer bir şey: Dosyayı yanlış okuyorsunuz.

new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("/resources/" + filename))) 
+0

Ama getResourceAsStream kullanırsam File sınıfını doğru kullanamıyorum? – Chrizmo

+1

Doğru değil. –

+1

Tüm dosyaları içeren bir dizinde bir dizinim var.Dosyalara erişmek için dizinde nasıl gezinirim ve daha sonra kullanırım? – Ava

4

Dosyayı yanlış okuyorsunuz. Dosya bir JAR'da bulunuyorsa, File sınıfını kullanamazsınız. Bunun yerine, getResourceAsStream() kullanarak dosyaya bir InputStream almak gerekir:

InputStream in = this.getClass().getResourceAsStream("/resources/" + filename);