| import java.io.InputStream; | |
| import java.io.InputStreamReader; | |
| import java.io.BufferedReader; | |
| import java.io.IOException; | |
| class ResourceNS | |
| { | |
| public static void main(String args[]) | |
| { | |
| ResourceNS res = new ResourceNS(); | |
| res.displayResourceText(); | |
| } | |
| public void displayResourceText() | |
| { | |
| /* | |
| * Since Java SE 9, invoking getResourceXXX on a class in a named | |
| * module will only locate the resource in that module, it will | |
| * not search the class path as it did in previous release. So when | |
| * you use Class.getClassLoader().getResource() it will attempt to | |
| * locate the resource in the module containing the ClassLoader, | |
| * possibly something like: | |
| * jdk.internal.loader.ClassLoaders.AppClassLoader | |
| * which is probably not the module that your resource is in, so it | |
| * returns null. | |
| * | |
| * You have to make java 9+ search for the file in your module. | |
| * Do that by changing Class to any class defined in your module in | |
| * order to make java use the proper class loader. | |
| */ | |
| // Namespaces are relative, use leading '/' for full namespace | |
| InputStream is = | |
| ResourceNS.class.getResourceAsStream("/ns/ns1/HelloWorld.txt"); | |
| // C++: cout << is.readline(); // oh, well ! | |
| InputStreamReader isr = new InputStreamReader(is); | |
| BufferedReader reader = new BufferedReader(isr); | |
| String out = ""; | |
| try{ | |
| out = reader.readLine(); | |
| } catch(IOException e) { | |
| e.printStackTrace(); | |
| System.out.println(e); | |
| } | |
| System.out.println(out); | |
| } | |
| } |