Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法使用getResourceAsStream读取文件_Java - Fatal编程技术网

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
由于整个项目将打包成一个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());

}
}

似乎“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()?复制粘贴这么多?