Java 无法使用getResourceAsStream读取文件
我有一个文件夹结构,如 计划Java 无法使用getResourceAsStream读取文件,java,Java,我有一个文件夹结构,如 计划 src --TestMain.java 垃圾箱 --TestMain.class 资源 --test.txt 由于整个项目将打包成一个jar文件,因此我必须使用getResourceAsStream从资源中读取一个文件。虽然我已经通读了关于getResourceAsStream的所有问题,但我仍然无法让它正常工作。有人能帮忙吗?谢谢大家! public class TestMain { public static void main(String[] args
- src
- --TestMain.java
- 垃圾箱
- --TestMain.class
- 资源
- --test.txt
public class TestMain {
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
InputStream stream = TestMain.class.getResourceAsStream("\resources\test.txt");
System.out.println(stream);
BufferedReader bufRead = new BufferedReader(new InputStreamReader(stream));
StringBuilder builder = new StringBuilder();
String line=null;
while((line=bufRead.readLine())!=null){
builder.append(line).append("\n");
}
System.out.println(builder.toString());
}
}
似乎“resources”文件夹在您的类路径中,在获取其下的资源时不需要它,请在下面尝试
InputStream stream = TestMain.class.getResourceAsStream("test.txt");
test.txt是否在类路径中?我认为test.txt不在类路径中。 要做到这一点,您有很多解决方案
- 可以提供文件的完整路径(c:/…)
- 验证生成.jar文件时,txt是否在.jar中。如果没有,请在java项目中包含资源文件夹。当您包含时,会直接为 getResourceAsStream(“test.txt”)
对于java项目的已禁用资源,请使用第一个选项,但如果没有意义,请使用第二个选项。基本上有两种不同的方法:
ClassLoader.getResourceAsStream()
和Class.getResourceAsStream()
。这两种方法将以不同的方式定位资源
在Class.getResourceAsStream(path)
中,该路径被解释为从中调用它的类的包的本地路径。例如,调用String.getResourceAsStream(“file.txt”)
将在类路径中的以下位置查找文件:“java/lang/file.txt”
。如果路径以/
开头,则它将被视为绝对路径,并将从类路径的根开始搜索。因此,调用String.getResourceAsStream(“/myfile.txt”)
将查看类路径中的以下位置。/file.txt
<> >代码>类加载器.GETRealSuffSturnScript(PATH)< /C> >将考虑所有路径为绝对路径。因此,调用String.getClassLoader().getResourceAsString(“myfile.txt”)
和String.getClassLoader().getResourceAsString(“/file.txt”)
都会在类路径中的以下位置查找文件:/file.txt
每次访问该位置时,它可能是文件系统本身中的一个位置,也可能是相应jar文件中的一个位置,具体取决于从中加载资源的类和/或类加载器
如果您是从应用程序服务器加载类,那么应该使用
Thread.currentThread().getContextClassLoader().getResourceAsStream(文件名)
而不是this.getClass().getClassLoader().getResourceAsStream(文件名)
this.getClass().getResourceAsStream()
也可以工作。假设您使用的是httpclient:
HttpClient httpClient = new HttpClient();
httpClient.getHostConfiguration().setProxy(proxyHost, proxyPort);//your proxyHost & your proxyPort,
GetMethod getMethod = new GetMethod(url);//your url,
try {
httpClient.executeMethod(getMethod);
//strData = getMethod.getResponseBodyAsString();
InputStream resStream = getMethod.getResponseBodyAsStream();
BufferedReader br = new BufferedReader(new InputStreamReader(resStream));
StringBuffer resBuffer = new StringBuffer();
String resTemp = "";
while((resTemp = br.readLine()) != null){
resBuffer.append(resTemp);
}
String response = resBuffer.toString();
} catch (Exception e) {
System.out.println("HttpProxyManager.getResponse returns NULL");
e.printStackTrace();
} finally {
getMethod.releaseConnection();
}
字符串响应应该是您想要得到的。您是否得到空指针异常?或者别的什么是的,我喜欢。我得到了InputStream的空指针:stream。当我生成.jar文件时,似乎资源文件夹不在那里。如何在.jar文件中包含resources文件夹?我可以问一下,如果我做得不对,如何直接创建一个指向“text.txt”的路径吗?我使用Eclipse。谢谢。嗯。。。。单击项目/生成路径/新建源文件夹。然后粘贴test.txt,但我认为,如果您的run:mvn clean包是干净的,那么他必须生成一个包含资源的jar。如果您使用maven look:。你也可以读一本关于maven jar插件的食谱。祝你好运我确信我已将resources文件夹添加到我的运行时类路径中。但是,它仍然不起作用。谢谢分享-非常感谢!这是否意味着我们应该始终使用ClassLoader.getResourceAsStream()而不是Class?getResourceAsStream()?复制粘贴这么多?