Basically I have a web-app and I am trying to read youtube API client_secrets.json using
InputStreamReader and assign its value to
Reader clientSecretReader = new InputStreamReader( Auth.class.getResourceAsStream("/home/hazrat/Documents/eclipse-jee-neon-3-linux-gtk-x86_64/eclipse/client_secrets.json"));
FYI: This file is located in an external directory an not in my eclipse resources directory.
But the above code throws a nullpointerexception even though if I try my terminal
nano /home/hazrat/Documents/eclipse-jee-neon-3-linux-gtk-x86_64/eclipse/client_secrets.json it opens the file in a text editor which basically Assures me that the file is in its location.
You're trying to load a file, but you're using
Class.getResourceAsStream to do so. If you want to load a file, use a
FileInputStream. If you want to load a resource which is accessible to a
ClassLoader.getResourceAsStream. They're different use cases, and should be handled with different code.
Note that the problem here has nothing to do with
InputStreamReader. It's all about how you obtain the
InputStream to start with. Having said that, I would encourage you to explicitly specify the encoding to use when creating an
InputStreamReader, as otherwise you'll use the platform-default encoding.
Having said all of that, if you're on a modern version of Java, I'd use
Files.newBufferedReader to create a
Reader for the specified
Path, defaulting to UTF-8 (which is probably what you want).
See more on this question at Stackoverflow