Reputation: 48308
I am trying to access a file in another directory outside my java project.
The structure is like this:
.
|-- resources
| |-- api
| | |-- data.json
|-- src
| |-- java
| | |-- .classpath
| | |-- pom.xml
| | |-- src
My java project is located at ./src/java/
My resource directory is located at ./resources/api/
I have modified the .classpath
of src/java/
like so:
<classpathentry kind="lib" path="./../../resources/api"/>
And I am trying to access the resource in the following ways:
String filename = "data.json";
URL file_url = this.getClass().getClassLoader().getResource(filename);
System.out.println("URL IS "+file_url);
//outputs null
file_url = this.getClass().getResource(filename);
System.out.println("URL IS "+file_url);
//outputs null
InputStream in = this.getClass().getResourceAsStream(filename);
System.out.println("InputStream IS "+in);
//outputs null
file_url = this.getClass().getResource("/api/"+filename);
System.out.println("URL IS "+file_url);
//outputs null
file_url = this.getClass().getResource("api/"+filename);
System.out.println("URL IS "+file_url);
//outputs null
file_url = this.getClass().getResource("resources/api/"+filename);
System.out.println("URL IS "+file_url);
//outputs null
file_url = this.getClass().getResource("/resources/api/"+filename);
System.out.println("URL IS "+file_url);
//outputs null
file_url = this.getClass().getResource("./"+filename);
System.out.println("URL IS "+file_url);
//outputs null
file_url = this.getClass().getResource("/"+filename);
System.out.println("URL IS "+file_url);
They are all returning null
. Anyone see anything I did wrong here?
==========================
Pretty silly, but I just needed to edit my Maven pom.xml to add the directory to the classpath, as instructed here.
I updated my pom.xml like this:
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<additionalClasspathElements>
<additionalClasspathElement>./../../resources/api/</additionalClasspathElement>
</additionalClasspathElements>
</configuration>
</plugin>
Apparently eclipse uses .classpath
and maven uses pom.xml
.
Upvotes: 1
Views: 2998
Reputation: 7265
Maybe the magic can be done with:
getClass().getResource("/api/data.json");
or (based on the use)
getClass().getResourceAsStream("/api/data.json");
Upvotes: 1