2016-03-19 30 views
0

Geçerli çalışma dizinimin dışındaki bir dosyayı, Java'da File ve URL sınıflarını kullanarak okumaya çalışıyorum. Geçerli çalışma dizininin varsayılan olarak . tarafından "temsil edildiğini" biliyorum.Geçerli çalışma dizini dışındaki dosyaların tam yolunu alma [java]

URL url = getClass().getResource("./file1.txt"); /* or "./anotherFolder/../file1.txt", or simply "file1.txt"*/ 
File f = new File(url.getPath()); 

ve her şeyin beklendiği gibi çalışır: Ben /folders/Desktop/file1.txt bir dosyayı file1.txt okumak istiyorsanız benim Java sınıfına varsayarsak

ben aşağıdakileri yapabilirsiniz, /folders/Desktop/MyClass.java altındadır.

Ancak geçerli çalışma dizininde olmayan ve alt dizininde olmayan bir dosyayı okumak için ne yapmalıyım? Örneğin, dosyanın yolu /folders/file1.txt mu? Her yerde aradım ama hiçbir şey bulamadım. ../file1.txt, ./../file1.txt ve diğerlerini denedim, ancak hiçbir şey işe yaramıyor. Belki bir şeyi özledim ya da belki doğru yerlerde aramadım.

+0

Yeni FIle ("/ folders/file1.txt") ile ilgili sorun nedir? – Turo

+0

Bu yönerge yanlış değil, benim durumumda çalışır. Sorun, geçerli çalışma dizininin alt dizinlerinde olmayan dosyaları okumak istediğimde ortaya çıkar. Özellikle, bir File sınıfının bir örneğini oluşturmaya çalıştığımda bir java.lang.NullPointerException atılır. – Process0

+0

Kaynak kullanmayın, sadece yeni Dosya (dosya adı). Dosya, yol doğru olduğu sürece herhangi bir yerde olabilir. Dosya adı boş değilken NPE'yi nasıl atabilir? – Turo

cevap

0

Dosya adına bir yol belirtmezseniz, java uygulamanın çalıştığı dizinde arama yapar.

Örnek:

dosyası değil bu klasörde sonra eğer: Dosya Projenin ana klasörde ise

Bu

public static void main(String[] args) { 
     final File foo = new File("asd.txt"); 
     System.out.println(foo.exists()); 
    } 

düzenle ... true yazdırır Klasör yapısında "./" veya "../" operatörleri ile "yukarı" gidebilir ya da File("/src/asd.txt") klasörlerinde daha derine inebilirsiniz, örneğin dosya src klasörünün içerisindeydi. .

enter image description here

+0

Evet, biliyorum. Aslında, şu andaki çalışma dizinindeki ve alt dizinlerindeki dosyalar ile ilgili herhangi bir sorun yaşamadım. Herhangi bir proje yok! – Process0

0

Eğer programlı dosya sistemini geçmesini öngören ya ya da kullanıcı girişi ile mutlak bir yol alacağı ve new File(absolutePathAsString) ile java.io.File nesne oluşturmak geçerli çalışma dizini altında olmayan bir dosyaya erişmek istiyorsanız . Daha yeni olan java.nio.file API'sini kullanmayı düşünebilirsiniz.