I would like to know how can I load a file lol.txt
from src
folder into my close method. The code so far:
public void close() throws IOException {
boolean loadFromClasspath = true;
String fileName = "..."; // provide an absolute path here to be sure that file is found
BufferedReader reader = null;
try {
if (loadFromClasspath) {
// loading from classpath
// see the link above for more options
InputStream in = getClass().getClassLoader().getResourceAsStream("lol.txt");
reader = new BufferedReader(new InputStreamReader(in));
} else {
// load from file system
reader = new BufferedReader(new FileReader(new File(fileName)));
}
String line = null;
while ( (line = reader.readLine()) != null) {
// do something with the line here
System.out.println("Line read: " + line);
}
} catch (IOException e) {
JOptionPane.showMessageDialog(null,e.getMessage()+" for lol.txt","File Error",JOptionPane.ERROR_MESSAGE);
} finally {
if (reader != null) {
reader.close();
}
}
}
Console error output on initiation:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at java.io.Reader.<init>(Unknown Source)
at java.io.InputStreamReader.<init>(Unknown Source)
at main.main.close(main.java:191)
at main.main$1.windowClosing(main.java:24)
at java.awt.Window.processWindowEvent(Unknown Source)
at javax.swing.JFrame.processWindowEvent(Unknown Source)
at java.awt.Window.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
If you like to load the file from inside a jar file (i.e. from classpath) please see this answer for more options on how to get an
InputStream
. In the code below I have left-out exception handling and removed yourRandom
related code.Edit: It seems that you are either doing something wrong with your folder structure or you are using a wrong package/file name. Just to be clear. At the moment you seem to have a class called
main
under amain
package. Your folder structure should be something like this:When you compile, your lol.txt file (btw those are lowercase L's not the digit 1 right?) should be copied under
/bin/main/
folderIf this is the case then use the code like this:
InputStream in = getClass().getClassLoader().getResourceAsStream("main/lol.txt");
If your folder structure is different please change accordingly
If you want to get the
InputStream
of a file (resource) from the classpath, you can do the followingassuming the resource named
lol.txt
is in the same package as the class represented and returned bygetClass()
.If the resource is not in the same package, you can prefix the path with a
/
to tell the method to look at the root of the classpath.If you're trying to access the resource from a
static
method, you won't have access tothis
. You'll need to useRead the javadoc here.