gpt4 book ai didi

java - 如何引用 Java 包中的文件

转载 作者:行者123 更新时间:2023-12-01 16:03:13 25 4
gpt4 key购买 nike

我有 MyClassin 包 X,另外在包 X 中还有包 Y 和 Z,如下所示:

X - 我的类(class)
X - Y - 一些文件
X - Z - 一些文件

如何从 MyClass 获取包 Y 和 Z 中所有文件的列表?

最佳答案

Java 包镜像目录结构。您可以使用 File类(class)。特别是,请参阅listFiles()方法。

编辑

您可以动态查找您的执行位置。这是我最近从事的一个项目的代码;我希望能够找到运行 JAR 的目录(如果我运行 JAR),或者如果我从类文件运行,则找到 JAR 的目录。就我而言,我的 JAR 位于 <project root>/bin我的类(class)在 <project root>/classes .

final URL location;
final String classLocation = JavaPlanner.class.getName().replace('.', '/') + ".class";
final ClassLoader loader = JavaPlanner.class.getClassLoader();

if(loader == null)
{
try { throw new ClassNotFoundException("class loaded with bootstrap loader"); }
catch (ClassNotFoundException cnfe) { throw new InitializationException(cnfe); }
}
else
{
location = loader.getResource(classLocation);
}

if(location.toString().startsWith("file:/")) // Line 14
{
// Running from .class file
String path;
try { path = URLDecoder.decode(location.toString().substring(6), "UTF-8"); }
catch(UnsupportedEncodingException uee) { throw new InitializationException(uee); }

// Move up package folders to root, add /bin/
File package_ = new File(path).getParentFile();
binPath = package_.getParentFile().getParentFile().getParentFile().getParentFile() + File.separator + "bin" + File.separator;
}
else // Line 25
{
// Running from .jar file
String jarURL = JavaPlanner.class.getResource("/" + JavaPlanner.class.getName().replaceAll("\\.", "/") + ".class").toString();
jarURL = jarURL.substring(4).replaceFirst("/[^/]+\\.jar!.*$", "/");

try
{
File dir = new File(new URL(jarURL).toURI());
jarURL = dir.getAbsolutePath();
}
catch(MalformedURLException mue) { throw new InitializationException(mue); }
catch(URISyntaxException use) { throw new InitializationException(use); }

binPath = jarURL;
}

在第 14 行,我发现我正在从类文件运行应用程序。 String path最初设置为文件路径JavaPlanner (包含我的 main 方法的类)。我知道包结构JavaPlanner是,所以我使用 getParentFile适当次数找到项目根目录,然后追加 bin/。

在第 25 行,我发现我正在从 JAR 运行该应用程序。该 block 只是获取包含该可执行 JAR 的文件夹的路径。

显然,这段代码并不是 100% 适合您的目的(最具体地说,我为我的包结构调用 getParentFile 特定次数),但我认为它应该有所帮助。

上述代码的全部目的是能够为我的应用程序找到正确的资源文件。在生产版本中,只有 JAR 可供用户使用,但我不想每次需要测试某些代码时都必须重建 JAR,并且我不想重复我的资源文件,而且我不想用类文件污染我的 bin/文件夹(因为 bin/中的所有内容都应该发送给用户)。

关于java - 如何引用 Java 包中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3291904/

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