Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.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 从类路径加载资源时出现问题_Java_Tomcat_Path - Fatal编程技术网

Java 从类路径加载资源时出现问题

Java 从类路径加载资源时出现问题,java,tomcat,path,Java,Tomcat,Path,在本地tomcat中运行的web应用程序中,我试图加载一个文件夹/folder,它位于tomcat/webapps/myproject/web-INF/folder 要做到这一点: InputStream realPath = getClass().getClassLoader().getResourceAsStream("/folder"); 返回null。这段代码应该从类路径加载资源,如果我的文件夹所在的路径没有错的话。 无论如何,我将文件夹移动到了不同的路径,例如tomcat/web


在本地tomcat中运行的web应用程序中,我试图加载一个文件夹
/folder
,它位于
tomcat/webapps/myproject/web-INF/folder
要做到这一点:

InputStream realPath = getClass().getClassLoader().getResourceAsStream("/folder");  
返回
null
。这段代码应该从类路径加载资源,如果我的文件夹所在的路径没有错的话。
无论如何,我将文件夹移动到了不同的路径,例如
tomcat/webapps/myproject/WEB-INF/classes/folder
tomcat/webapps/myproject/WEB-INF/lib/folder
,结果相同。
我错过什么了吗?提前谢谢

关于您的所有答案(谢谢),我用我所有的尝试编辑我的问题,结果相同。
(A)

(B)

(C)


我必须说我的
文件夹
路径是
tomcat/webapps/myproject/WEB-INF/classes/folder

问题是/WEB-INF不在WAR文件的类路径中

/WEB-INF/classes位于类路径中;/WEB-INF/lib中的所有JAR也是如此

如果将需要的文件放入/WEB-INF/classes,WAR类装入器应该能够找到它

您不能以这种方式读取目录。它一定是一个文件

更新:

无论如何,我把文件夹移到了不同的位置 路径,例如 tomcat/webapps/myproject/WEB-INF/classes/folder 或 tomcat/webapps/myproject/WEB-INF/lib/folder 同样的结果。我错过了吗 什么

是的,你错过了两件事:

  • 你的文件夹应该放在一个地方-在/WEB-INF/classes下
  • 无法使用getResourceAsStream()访问文件夹并读取所有内容。这样不行。这样只能读取一个单独的文件

  • 问题是/WEB-INF不在WAR文件的类路径中

    /WEB-INF/classes位于类路径中;/WEB-INF/lib中的所有JAR也是如此

    如果将需要的文件放入/WEB-INF/classes,WAR类装入器应该能够找到它

    您不能以这种方式读取目录。它一定是一个文件

    更新:

    无论如何,我把文件夹移到了不同的位置 路径,例如 tomcat/webapps/myproject/WEB-INF/classes/folder 或 tomcat/webapps/myproject/WEB-INF/lib/folder 同样的结果。我错过了吗 什么

    是的,你错过了两件事:

  • 你的文件夹应该放在一个地方-在/WEB-INF/classes下
  • 无法使用getResourceAsStream()访问文件夹并读取所有内容。这样不行。这样只能读取一个单独的文件

  • 删除前导斜杠并尝试,即

    InputStream realPath = getClass().getClassLoader().getResourceAsStream("folder");  
    

    删除前导斜杠并尝试,即

    InputStream realPath = getClass().getClassLoader().getResourceAsStream("folder");  
    

    如果您希望在webapp中获得文件夹的完整路径,以便可以对其进行文件操作,下面是一种方法

    注意:myfolder与我的webapp中的WEB-INF并行

    String relativeWebPath = "/myfolder";
    String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath);
    
    现在打印出
    absoluteDiskPath
    给了我

    D:\apache-tomcat-6.0.20\webapps\mywebapp\myfolder
    
    尝试按列出该文件夹中的文件

    File dir = new File(absoluteDiskPath); 
    
    String[] children = dir.list(); 
    if (children != null) 
    { 
    
        for (int i=0; i<children.length; i++) { 
        // Get filename of file or directory 
    
        String filename = children[i]; 
        System.out.println("filename no " + i + filename);
        } 
    }
    
    File dir=新文件(绝对磁盘路径);
    String[]children=dir.list();
    如果(子项!=null)
    { 
    
    对于(int i=0;i如果您希望在webapp中获得文件夹的完整路径,以便可以在其上使用文件操作,下面是一种方法

    注意:myfolder与我的webapp中的WEB-INF并行

    String relativeWebPath = "/myfolder";
    String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath);
    
    现在打印出
    absoluteDiskPath
    给了我

    D:\apache-tomcat-6.0.20\webapps\mywebapp\myfolder
    
    尝试按列出该文件夹中的文件

    File dir = new File(absoluteDiskPath); 
    
    String[] children = dir.list(); 
    if (children != null) 
    { 
    
        for (int i=0; i<children.length; i++) { 
        // Get filename of file or directory 
    
        String filename = children[i]; 
        System.out.println("filename no " + i + filename);
        } 
    }
    
    File dir=新文件(绝对磁盘路径);
    String[]children=dir.list();
    如果(子项!=null)
    { 
    

    对于(int i=0;i您不能,也不应该。除了ServletConfig.getRealPath()之外,没有其他方法可以获取此文件夹的路径??我想这样做,因为以前也给了我问题。更好的问题是:你想做什么?我知道你想获得文件夹的路径并读取内容;有多少个文件,用于什么目的?你对这些文件做什么?我想将此文件夹路径发送到另一个函数,该函数将处理每个文件在此文件夹中(每次的编号都会不同,可能是10,可能是1000).但我不想依赖于我使用的机器,所以我想把这些资源放在我的tomcat中。谢谢文件夹中有什么?这些文件是如何到达那里的?你是通过HTTP请求通过servlet触发的吗?还是你每天都要执行的定期工作?如果是后者,我不认为web应用是最好的正确的方法。Quartz或cron作业将是一个更好的主意。我不确定这是否属于web服务器。你不能,也不应该。而且除了ServletConfig.getRealPath()之外,没有其他方法可以获取此文件夹的路径??我想这样做,因为以前也给了我问题。更好的问题是:你想做什么?我知道你想获得文件夹的路径并读取内容;有多少个文件,用于什么目的?你对这些文件做什么?我想将此文件夹路径发送到另一个函数,该函数将处理每个文件在此文件夹中(每次的编号都会不同,可能是10,可能是1000).但我不想依赖于我使用的机器,所以我想把这些资源放在我的tomcat中。谢谢文件夹中有什么?这些文件是如何到达那里的?你是通过HTTP请求通过servlet触发的吗?还是你每天都要执行的定期工作?如果是后者,我不认为web应用是最好的正确的方法。石英或cron作业会是一个更好的主意。我不确定这是否属于web服务器。我也尝试过,结果相同。ThanksI也尝试过,结果相同。ThanksThanks,我以前也尝试过,但我在初始化Servlet时遇到了问题,这就是为什么我决定改变我的方式。我遇到的问题是在这个演员阵容中vlet servlet=(servlet)context.getExternalContext();您能将字符串绝对化为diskPath=getServletContext().getRealPath(relativeWebPath);没有问题吗???@mujer esponja:是的,如果您的代码是正确的