обычно это потому, что класс, который вы получаете getClass (), находится в пакете com.something.app, и поэтому с относительным путем ваши данные должны находиться на уровне com / что-то / приложение / данные /.В противном случае используйте абсолютный путь.
Чтобы увидеть, что находится в вашем jarfile:
jar tvf myapp.jar
[хорошо, после долгих проверок и некоторого тестирования] ...
jcomeau@intrepid:/tmp$ cat test.java; java -cp test.jar test; jar tvf test.jar
import java.io.*;
public class test {
public static void main(String[] args) {
//System.out.println(test.class.getResource("data/level"));
try {
System.out.println(new File(test.class.getResource("data/level").getPath()));
System.out.println(test.class.getResourceAsStream("data/level/test").read());
} catch (Exception whatever) {
System.err.println("error: " + whatever);
}
}
}
file:/tmp/test.jar!/data/level
116
0 Thu Nov 11 00:36:14 PST 2010 META-INF/
40 Thu Nov 11 00:36:14 PST 2010 META-INF/MANIFEST.MF
1362 Thu Nov 11 00:35:46 PST 2010 test.class
0 Wed Nov 10 07:53:18 PST 2010 data/
0 Wed Nov 10 07:53:28 PST 2010 data/level/
5 Wed Nov 10 07:53:28 PST 2010 data/level/test
jcomeau@intrepid:/tmp$
Я слишком устал, чтобы продолжать, но main () печатает 116, что является значением A в формате ASCII "t", результатом чтения (), которое читает в первом байте.Этого должно быть достаточно, чтобы доказать, что getResourceAsStream () позволит вам получить доступ к вашим ресурсам.Должен быть способ сделать это и с File (), но возвращенный путь странный с этим '!'отделяя путь к jarfile с путем внутри jarfile.Я никогда не имел дело с этим раньше.