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不在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 同样的结果。我错过了吗 什么 是的,你错过了两件事:
删除前导斜杠并尝试,即
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:是的,如果您的代码是正确的