java relative path
Solution 1
getResource
searches via the classloader, so typically and simplified in the classpath. The src
folder is not in the classpath – it only exists for the build. Depending on your build system (ANT, Maven, IDE internal) a resources folder may be merged into the classpath. You put your resource directly into the source folder which will also work (if the build process copies all non-Java resources to the class output folder or if the source folder is used for the output of the generated classes).
/
is the root for your resources if you use absolute resource locations. It is equivalent to the root within the src
folder. /i3d/resourcesloader/libraries/lib.txt
would be the correct way to access the resource.
It would be nicer to separate the resources in a separate folder that is merged by the build tool (e.g. in Maven: /src/main/java
, /src/main/resources
).
Solution 2
You should only provide relative path from your classloading point (ie without src
):
String path = ResourcesLoader.class.getResource("/i3d/resourcesloader/libraries/lib.txt").toString();
Solution 3
It seems you are using NetBeans?
Just create a folder called src\resources
, get your files inside there, and call this.getClass().getResource("lib.txt");
.
Netbeans will pack that properly when building and the resources will be in the main folder inside the jar, so you can get without having to specify their folder.
MRM
Updated on June 04, 2022Comments
-
MRM almost 2 years
Using the snippet below throws me a null pointer exception, but i can't find the reason:
String path = ResourcesLoader.class.getResource("src/i3d/resourcesloader/libraries/lib.txt").toString();
Am i using the
getResources
wrong? I even tried to enter the full path, like "D:\Workspace...", double backslashes, double forwardslashes but i get the exception of null pointer. The only thing i haven't tried is using java's path separator, but that shouldn't be a problem at this moment as it runs on Windows. What do i miss?Thanks!
-
nidhin about 12 yearsWhat about i3d/resourcesloader/libraries/lib.txt
-
Admin about 12 yearsWhat happens if you remove the src part from your path?
-
-
MRM about 12 yearsi've tried your way but it does't seem to find the file;still null pointer. using the
/i3d/resourcesloader/libraries/lib.txt
works though. -
MRM about 12 years
/i3d/resourcesloader/libraries/lib.txt
works just fine,thx. -
MRM about 12 years...it looks like if i use
/i3d/resourcesloader/libraries/lib.txt
i can't pass the string to a file constructor because it acts like it creates an empty file, not linking with the existing one at that adress. Instead, if i usesrc/i3d/resourcesloader/libraries/lib.txt
in the File constructor it reads the existing one. I'm confused! -
Hauke Ingmar Schmidt about 12 years
getResource
returns anURL
. Use this, don'ttoString
it. Better yet: In most cases you can just usegetResourceAsStream
and don't need any manual work with file handles.