Как да направя препратка към ресурс в Java?

Трябва да прочета файл в моя код. Физически се намира тук:

C:\eclipseWorkspace\ProjectA\src\com\company\somePackage\MyFile.txt

Поставих го в изходен пакет, така че когато създам изпълняващ се JAR файл (Експортиране->Runnable JAR файл), той се включва в буркана. Първоначално го имах в корена на проекта (и също опитах нормална подпапка), но експортирането не го включваше в буркана.

Ако в моя код направя:

File myFile = new File("com\\company\\somePackage\\MyFile.txt");

jar файлът правилно намира файла, но стартирайки локално (Run As->Java Main application) хвърля изключение за файл, който не е намерен, защото очаква да бъде:

File myFile = new File("src\\com\\company\\somePackage\\MyFile.txt");

Но това се проваля в моя jar файл. Въпросът ми е как да накарам тази концепция да работи както за локално, така и за моя jar файл?


person Chris Knight    schedule 16.09.2010    source източник


Отговори (2)


Използвайте ClassLoader.getResourceAsStream или Class.getResourceAsStream. Основната разлика между двете е, че версията ClassLoader винаги използва "абсолютен" път (в рамките на jar файла или каквото и да е), докато версията Class е относителна към самия клас, освен ако не поставите префикс на пътя с /.

Така че, ако имате клас com.company.somePackage.SomeClass и com.company.other.AnyClass (в рамките на същия зареждащ клас като ресурса), можете да използвате:

SomeClass.class.getResourceAsStream("MyFile.txt")

or

AnyClass.class.getClassLoader()
              .getResourceAsStream("com/company/somePackage/MyFile.txt");

or

AnyClass.class.getResourceAsStream("/com/company/somePackage/MyFile.txt");
person Jon Skeet    schedule 16.09.2010

Ако съм поставил i файл в jar файл, той работи само ако и само ако съм използвал

...getResourceAsStream("com/company/somePackage/MyFile.txt")

Ако използвах File обект, той никога не работи. Получих и изключението FileNotFound. Сега оставам с обекта InputStream.

person Christian    schedule 16.09.2010