gpt4 book ai didi

Java 文件相对于类的位置

转载 作者:行者123 更新时间:2023-11-30 02:21:59 24 4
gpt4 key购买 nike

我很困惑 java 如何从类加载器的角度看待文件系统。

假设我在 EAR 的 APP-INF/lib 文件夹中有一个 jar 文件。该 jar 文件包含一个类,该类实例化 new File("foo.txt")。另外,foo.txt 位于 APP-INF/lib 文件夹中 jar 旁边。

然后,我在 WAR 模块中使用这个库。现在,代码是否仍然可以找到该文件,或者是否可以在 EAR 的根目录或 WAR 的根目录中找到该文件?

最佳答案

我非常确定该文件需要位于 WAR 的根目录中,因为 WAR 从 EAR 的 APP-INF/lib 加载到 jar 文件中,因此它将相对于 WAR 的文件路径进行搜索

这是如何在类路径中处理它的示例

package main;

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

public class Test {

private Test() {
Class<?> c = this.getClass();
ClassLoader cl = c.getClassLoader();
InputStream[] iss = new InputStream[8];
URL[] urls = new URL[8];
iss[0] = c.getResourceAsStream("/resources/txtFile.txt");
iss[1] = c.getResourceAsStream("resources/txtFile.txt");
iss[2] = c.getResourceAsStream("/txtFile.txt");
iss[3] = c.getResourceAsStream("txtFile.txt");
iss[4] = cl.getResourceAsStream("/resources/txtFile.txt");
iss[5] = cl.getResourceAsStream("resources/txtFile.txt");
iss[6] = cl.getResourceAsStream("/txtFile.txt");
iss[7] = cl.getResourceAsStream("txtFile.txt");
urls[0] = c.getResource("/resources/txtFile.txt");
urls[1] = c.getResource("resources/txtFile.txt");
urls[2] = c.getResource("/txtFile.txt");
urls[3] = c.getResource("txtFile.txt");
urls[4] = cl.getResource("/resources/txtFile.txt");
urls[5] = cl.getResource("resources/txtFile.txt");
urls[6] = cl.getResource("/txtFile.txt");
urls[7] = cl.getResource("txtFile.txt");
for (int i = 0; i < 8; i++)
System.out.println("iss[" + i + "] is "
+ String.valueOf(iss[i] == null));
for (int i = 0; i < 8; i++)
System.out.println("url[" + i + "] is "
+ String.valueOf(urls[i] == null));

}

public static final void main(String[] args) {
new Test();
}
}

打印

iss[0] is false
iss[1] is true
iss[2] is true
iss[3] is true
iss[4] is true
iss[5] is false
iss[6] is true
iss[7] is true
url[0] is false
url[1] is true
url[2] is true
url[3] is true
url[4] is true
url[5] is false
url[6] is true
url[7] is true

关于Java 文件相对于类的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46579522/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com