Вам не нужен «Файл» экземпляр чтобы прочитать содержимое файла, как отвечали другие, просто используйте Stream или URL. Обратите внимание, что путь является абсолютным при использовании загрузчика классов:
Main.class.getClassLoader().getResourceAsStream("fileAtRoot.txt")
эквивалентно
Main.class.getResourceAsStream("/fileAtRoot.txt")
Если вы действительно хотите файл, он не будет работать в любом случае: Вы можете получить его, если это файл, но когда он находится внутри JAR, Файл не открывается, он будет работать только из eclipse или если вы помещаете папку вместо jar в свой путь к классам.
Вот ан пример:
ПРЕДУПРЕЖДЕНИЕ: ЭТО антипаттерн, НЕ реально использовать его
public class SOResourceLoad {
public static void main (String[] args) {
new SOResourceLoad().run();
}
private void run() {
try {
URL resource = getClass().getResource("SOResourceLoad.class");
System.out.println(resource);
System.out.println(resource.toURI());
System.out.println(new File(resource.toURI()));
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
}
Результат от Затмения
file:/D:/opt/workspace/examples/target/classes/pdem/stackoverflow/SOResourceLoad.class
file:/D:/opt/workspace/examples/target/classes/pdem/stackoverflow/SOResourceLoad.class
D:\opt\workspace\examples\target\classes\pdem\stackoverflow\SOResourceLoad.class
результата из файла фляги :
jar:file:/D:/opt/sodist.jar!/pdem/stackoverflow/SOResourceLoad.class
jar:file:/D:/opt/sodist.jar!/pdem/stackoverflow/SOResourceLoad.class
Exception in thread "main" java.lang.IllegalArgumentException: URI is not hierarchical
at java.io.File.<init>(File.java:418)
at pdem.stackoverflow.SOResourceLoad.run(SOResourceLoad.java:25)
at pdem.stackoverflow.SOResourceLoad.main(SOResourceLoad.java:17)
Стекло показывает нам, что мы не можем получить файл, когда мы выполняем файл jar.
проще использовать абсолютный путь, а не релятивистский – Whitefret