java - getResourceAsStream()总是返回null





web-services jboss inputstream (7)


当我从Websphere 8.5更改为WebSphere Liberty时,我遇到了同样的问题。

我使用FileInputStream而不是getResourceAsStream() ,因为由于某种原因,WebSphere Liberty无法在WEB-INF文件夹中找到该文件。

该脚本是:

FileInputStream fis = new FileInputStream(getServletContext().getRealPath("/") 
                        + "\WEBINF\properties\myProperties.properties")

注意:我仅将此脚本用于开发。

我在Java Web应用程序中有以下结构:

TheProject
  -- [Web Pages]
  -- -- [WEB-INF]
  -- -- -- abc.txt
  -- -- index.jsp
  -- [Source Packages]
  -- -- [wservices]
  -- -- -- WS.java

WS.java ,我在Web方法中使用以下代码:

InputStream fstream = this.getClass().getResourceAsStream("abc.txt");

但它始终返回null。 我需要从该文件中读取,并且我读到如果将文件放在WEB-INF ,则可以使用getResourceAsStream访问它们,但该方法始终返回null

我可能做错了什么想法?

顺便说一句,奇怪的是这是有效的,但是在我对项目进行了Clean and Build ,它突然停止了工作:/




我不知道这是否适用于JAX-WS,但是对于JAX-RS,我能够通过注入ServletContext然后在其上调用getResourceAsStream()来访问文件:

@Context ServletContext servletContext;
...
InputStream is = servletContext.getResourceAsStream("/WEB-INF/test_model.js");

请注意,至少在GlassFish 3.1中,路径必须是绝对路径,即以斜线开头。 更多信息: 如何在jax-rs中使用属性文件?




我认为这样你可以从“任何地方”(包括服务器位置)获取文件,而你不需要关心放在哪里。

通常不得不关心这些事情。

Thread.currentThread().getContextClassLoader().getResourceAsStream("abc.properties");



代替

InputStream fstream = this.getClass().getResourceAsStream("abc.txt"); 

使用

InputStream fstream = this.getClass().getClassLoader().getResourceAsStream("abc.txt");

通过这种方式,它将从根目录开始,而不是从当前调用类的路径




我有一个类似的问题,我搜索了解决方案很长一段时间:看起来字符串参数区分大小写。 因此,如果你的文件名是abc.TXT,但是你搜索abc.txt,eclipse会找到它 - 可执行的JAR文件不会。




据我所知,该文件必须位于'this'类所在的文件夹中,即不在WEB-INF/classes而是嵌套得更深(除非您在默认包中编写):

net/domain/pkg1/MyClass.java  
net/domain/pkg1/abc.txt

将文件放入java源代码应该可以正常工作,编译器将该文件与类文件一起复制。




排除数字应该在范围参数中

private int GiveMeANumber(int range,int... exclude)
{

    Set<Integer> integers=new HashSet<>();
    int count=range;

    for(int i=0;i<count;i++)
        integers.add(i);

    integers.removeAll(Arrays.asList(exclude));


    int index = new Random().nextInt(range - exclude.length);

    count=0;

    for (int value:integers){
        if(count==index)
            return value;

        count++;
    }


    return 0;
}




java web-services jboss inputstream