Java jar查询中的通用文本资源?
我知道这个问题很常见,所以我一直在网络上疯狂地寻找解决方案,但没有结果。我只想从程序JAR中加载一个包含一些文本的文件。 以下是我试图阅读的内容:Java jar查询中的通用文本资源?,java,file,jar,Java,File,Jar,我知道这个问题很常见,所以我一直在网络上疯狂地寻找解决方案,但没有结果。我只想从程序JAR中加载一个包含一些文本的文件。 以下是我试图阅读的内容: String text = ""; int read, N = 1024 * 1024; char[] buffer = new char[N]; try { InputStream is = this.getClass(
String text = "";
int read, N = 1024 * 1024;
char[] buffer = new char[N];
try {
InputStream is = this.getClass().getClassLoader().getResourceAsStream("/help.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(is));
while(true) {
read = br.read(buffer, 0, N);
text += new String(buffer, 0, read);
if(read < N) {
break;
}
}
} catch(Exception ex) {
ex.printStackTrace();
}
String text=”“;
读取整数,N=1024*1024;
char[]buffer=新字符[N];
试一试{
InputStream is=this.getClass().getClassLoader().getResourceAsStream(“/help.txt”);
BufferedReader br=新的BufferedReader(新的InputStreamReader(is));
while(true){
read=br.read(缓冲区,0,N);
text+=新字符串(缓冲区,0,读取);
如果(读取
我并不真正理解java/eclipse构建路径的东西。但是我已经把help.txt放在了项目文件夹的根目录中。当执行上面的代码时,我当前收到了这个错误
java.lang.NullPointerException
at java.io.Reader.<init>(Reader.java:78)
at java.io.InputStreamReader.<init>(InputStreamReader.java:72)
at ajax.Gui.printHelp(Gui.java:330)
at ajax.Gui.onCommand(Gui.java:151)
at ajax.Gui$1.actionPerformed(Gui.java:130)
at javax.swing.JTextField.fireActionPerformed(JTextField.java:508)
at javax.swing.JTextField.postActionEvent(JTextField.java:721)
at javax.swing.JTextField$NotifyAction.actionPerformed(JTextField.java:836)
at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1661)
at javax.swing.JComponent.processKeyBinding(JComponent.java:2870)
at javax.swing.JComponent.processKeyBindings(JComponent.java:2917)
at javax.swing.JComponent.processKeyEvent(JComponent.java:2833)
at java.awt.Component.processEvent(Component.java:6282)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1895)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:762)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1027)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:899)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:727)
at java.awt.Component.dispatchEventImpl(Component.java:4731)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:688)
at java.awt.EventQueue$3.run(EventQueue.java:686)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:702)
at java.awt.EventQueue$4.run(EventQueue.java:700)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:699)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
java.lang.NullPointerException
在java.io.Reader上。(Reader.java:78)
位于java.io.InputStreamReader。(InputStreamReader.java:72)
位于ajax.Gui.printHelp(Gui.java:330)
位于ajax.Gui.onCommand(Gui.java:151)
在ajax.Gui$1.actionPerformed(Gui.java:130)
在javax.swing.JTextField.fireActionPerformed上(JTextField.java:508)
位于javax.swing.JTextField.postActionEvent(JTextField.java:721)
位于javax.swing.JTextField$NotifyAction.actionPerformed(JTextField.java:836)
位于javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1661)
位于javax.swing.JComponent.processKeyBinding(JComponent.java:2870)
位于javax.swing.JComponent.processKeyBindings(JComponent.java:2917)
位于javax.swing.JComponent.processKeyEvent(JComponent.java:2833)
位于java.awt.Component.processEvent(Component.java:6282)
位于java.awt.Container.processEvent(Container.java:2229)
位于java.awt.Component.dispatchEventImpl(Component.java:4861)
位于java.awt.Container.dispatchEventImpl(Container.java:2287)
位于java.awt.Component.dispatchEvent(Component.java:4687)
在java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1895)中
位于java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:762)
位于java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1027)
在java.awt.DefaultKeyboardFocusManager.typeAheadAssertions中(DefaultKeyboardFocusManager.java:899)
位于java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:727)
位于java.awt.Component.dispatchEventImpl(Component.java:4731)
位于java.awt.Container.dispatchEventImpl(Container.java:2287)
位于java.awt.Window.dispatchEventImpl(Window.java:2719)
位于java.awt.Component.dispatchEvent(Component.java:4687)
位于java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729)
在java.awt.EventQueue.access$200(EventQueue.java:103)
在java.awt.EventQueue$3.run(EventQueue.java:688)
在java.awt.EventQueue$3.run(EventQueue.java:686)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
在java.awt.EventQueue$4.run(EventQueue.java:702)
在java.awt.EventQueue$4.run(EventQueue.java:700)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
位于java.awt.EventQueue.dispatchEvent(EventQueue.java:699)
位于java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
在java.awt.EventDispatchThread.PumpeEventsforFilter(EventDispatchThread.java:161)
位于java.awt.EventDispatchThread.PumpeEventsforHierarchy(EventDispatchThread.java:150)
位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
在java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
你怎么办?
一些额外的信息:OS=LinuxMint14KDE,JDK=JavaSE1.7,IDE=Eclipse您可以不使用“/”来尝试 InputStream is=this.getClass().getClassLoader().getResourceAsStream(“help.txt”) 如果您在根目录中添加了文件,这应该可以工作 或者,您可以使用ABolute文件路径创建URL,然后使用
InputStream is = url.openStream();
该方法返回null
,因为它找不到文件
您可以执行以下操作之一:
- 确保文件位于类路径中;这就是
搜索的地方getResourceAsStream
- 将文件放入
目录中,如中所示resources
- 也可以将其放置在源目录结构中,如中所示
string
之后连接string