| 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); |
| } |
| } |