SORU
23 EYLÜL 2009, ÇARŞAMBA


Gerçekten nasıl okunur metin Java sınıf dosya

SINIF sistemi değişken içinde yer alan bir metin dosyası okumak için çalışıyorum. Kullanıcı bir değişken.

Dosyaya giriş akışı aşağıdaki gibi yapmaya çalışıyorum:

Dosya dizini (D:\myDir)SINIF yer ve denemek aşağıda:

InputStream in = this.getClass().getClassLoader().getResourceAsStream("SomeTextFile.txt");
InputStream in = this.getClass().getClassLoader().getResourceAsStream("/SomeTextFile.txt");
InputStream in = this.getClass().getClassLoader().getResourceAsStream("//SomeTextFile.txt");

SINIF içinde dosyanın tam yolunu (D:\myDir\SomeTextFile.txt)ve yukarıdaki kodları 3 aynı satırları deneyin.

Ama ne yazık ki bunlardan HİÇBİRİ çalışmıyor ve her zaman 10 ** benim İnputStream içine null alıyorum.

CEVAP
23 EYLÜL 2009, ÇARŞAMBA


Bir sınıf aynı classloader ile yüklü gelen sınıf, dizin,, birini kullanmak gerekir:

// From ClassLoader, all paths are "absolute" already - there's no context
// from which they could be relative. Therefore you don't need a leading slash.
InputStream in = this.getClass().getClassLoader()
                                .getResourceAsStream("SomeTextFile.txt");
// From Class, the path is relative to the package of the class unless
// you include a leading slash, so if you don't want to use the current
// package, include a slash like this:
InputStream in = this.getClass().getResourceAsStream("/SomeTextFile.txt");

Eğer bu çalışma değilse, bu bir şeylerin yanlış olduğunu gösteriyor.

Yani, örneğin, bu kodu alın:

package dummy;

import java.io.*;

public class Test
{
    // This code is nasty and not exception safe. Just demo code!
    public static void main(String[] args) throws Exception
    {
        InputStream stream = Test.class.getResourceAsStream("/SomeTextFile.txt");
        System.out.println(stream != null);
        stream = Test.class.getClassLoader()
            .getResourceAsStream("SomeTextFile.txt");
        System.out.println(stream != null);
    }
}

Ve bu dizin yapısı:

code
    dummy
          Test.class
txt
    SomeTextFile.txt

Ve (bir Linux kutusu üzerinde olduğum için Unıx yol ayırıcı kullanarak):

java -classpath code:txt dummy.Test

Sonuçlar:

true
true

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BDGcustoms

    BDGcustoms

    24 NİSAN 2011
  • The Platform

    The Platform

    14 HAZİRAN 2006
  • Watcher3223

    Watcher3223

    15 Kasım 2007