[英]unable to read file using getResourceAsStream
我有一个像 Project 这样的文件夹结构
由于整个项目将被打包成一个 jar 文件,我必须使用 getResourceAsStream 从资源中读取一个文件。 尽管我已经通读了有关 getResourceAsStream 的所有问题,但我仍然无法解决这个问题。 有人可以帮忙吗? 谢谢!
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());
}
}
基本上,有两种不同的方法: ClassLoader.getResourceAsStream()
和Class.getResourceAsStream()
。 这两种方法将不同地定位资源。
在Class.getResourceAsStream(path)
,路径被解释为调用它的类的包的本地路径。 例如,调用String.getResourceAsStream("file.txt")
将在类路径中的以下位置查找文件: "java/lang/file.txt"
。 如果您的路径以/
开头,则它将被视为绝对路径,并将从类路径的根开始搜索。 因此,调用String.getResourceAsStream("/myfile.txt")
将查看类路径中的以下位置 ./file.txt。
ClassLoader.getResourceAsStream(path)
会将所有路径视为绝对路径。 因此,调用String.getClassLoader().getResourceAsString("myfile.txt")
和String.getClassLoader().getResourceAsString("/file.txt")
都会在类路径中的以下位置查找文件: ./file.txt
每次定位时,它可能是文件系统本身中的一个位置,也可能是相应 jar 文件中的一个位置,具体取决于您从中加载资源的 Class 和/或 ClassLoader。
如果您从应用程序服务器加载类,那么您应该使用Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName)
而不是this.getClass().getClassLoader().getResourceAsStream(fileName)
。 this.getClass().getResourceAsStream()
也可以工作。
似乎文件夹“资源”在您的类路径中,在其下获取资源时不需要它,请尝试以下
InputStream stream = TestMain.class.getResourceAsStream("test.txt");
你的 test.txt 在你的类路径中吗? 我认为您的 test.txt 不在您的类路径中。 你有很多解决方案可以做到这一点。
一个可以提供文件的完整路径(c:/......)
验证生成 .jar 文件时,您的 txt 是否在 .jar 中。 如果没有在你的java项目中包含你的资源文件夹。 当您直接为 getResourceAsStream ("test.txt") 创建路径时
对于 Java 项目的不兼容资源,请使用第一个选项,但如果没有意义,请使用第二个选项。
假设您使用的是 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();
}
字符串响应应该是你想要的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.