gpt4 book ai didi

java - 使用 .getClassLoader().getResource() 从目录加载所有文件

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:15:24 25 4
gpt4 key购买 nike

在我的一个 JUnit 测试中,我试图加载目录中包含的所有文件。我使用 .getClassLoader().getResource("otherresources") 来查找目录。然后我创建了一个新的 java.io.File。然后我使用 listFiles() 获取所有子文件,然后再次使用 .getClassLoader().getResource() 加载每个文件。

URL url = FileLoadTest.class.getClassLoader().getResource("otherresources");
File directory = new File(url.getPath());
File[] files = directory.listFiles();

基本上,我希望能够加载目录中的所有文件,而无需确切知道它们是什么。

我可以在 Eclipse 中正确运行测试。当我使用 Maven (mvn install) 构建项目或使用 surefire (mvn -Dtest=FileTest test) 自行运行测试用例时,测试用例失败并显示空指针异常。我认为这个问题与 File api 在资源部署到的 JAR 文件中没有按预期工作有关。

关于如何解决这个问题的任何提示?

最佳答案

正确,File API 只能从文件系统中读取,而不能在 JAR 文件中读取。

不幸的是,如果不使用一些额外的库,这些库利用一些 hack 来尝试完成此操作,那么没有一种好方法可以准确地完成您想要做的事情。类路径上的资源并不意味着是可枚举的,因为无法保证它们从何处加载(可能是从磁盘、JAR 文件、HTTP、数据库或其他外来资源 - 包括可用文件枚举的资源)将不可行)。最好的方法是包含一个“索引”或其他具有众所周知名称的类似文件,可以引用这些文件来查找您感兴趣的其他资源。

这些“黑客”之一是,如果您知道 JAR 文件的路径,您可以使用 JarFile(或者甚至只是 ZipFile).

关于java - 使用 .getClassLoader().getResource() 从目录加载所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8453972/

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