将src文件夹中的文件加载到阅读器中 [英] Load a file from src folder into a reader
问题描述
我想知道如何从src
文件夹中将文件lol.txt
加载到我的close方法中.到目前为止的代码:
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 your Random
related code.
public void close() {
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("absolute/path/to/file/inside/jar/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();
}
}
}
编辑:似乎您的文件夹结构有误或使用了错误的程序包/文件名.只是要清楚.目前,您似乎在main
包下有一个名为main
的类.您的文件夹结构应如下所示:
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 a main
package. Your folder structure should be something like this:
+ src/
+ main/
main.java
lol.txt
编译时,应将您的lol.txt文件(顺便说一下,是小写的 L的不是数字的 1 吗?)应该复制到/bin/main/
文件夹下
When you compile, your lol.txt file (btw those are lowercase L's not the digit 1 right?) should be copied under /bin/main/
folder
如果是这种情况,请使用如下代码:
InputStream in = getClass().getClassLoader().getResourceAsStream("main/lol.txt");
If 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
这篇关于将src文件夹中的文件加载到阅读器中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!