gpt4 book ai didi

java - classLoader.getResource(filename) 不返回存在的文件(返回空)

转载 作者:行者123 更新时间:2023-12-01 14:31:37 25 4
gpt4 key购买 nike

我正在尝试加载 .json 文件以在 Beam 管道上进行测试。

代码看起来像

...
public class ExtractCsvMessageTest {
@Rule public final transient TestPipeline pipeline = TestPipeline.create();

final String filepath = "com/project/functions/ExtractCsvMessageTest/";
final String filename = filepath + "comma_delimited.json";
final ClassLoader classLoader = getClass().getClassLoader();

final File commaDelimited = new File(classLoader.getResource(filename).getFile());
...

运行调试器后,我可以看到抛出错误的行是:

final File commaDelimited = new File(classLoader.getResource(filename).getFile());

我的路径是这样的

test
├── java
│   └── com
│   └── project
│   ├── functions
│   │   ├── ExtractCsvMessageTest.java
│   └── transforms
└── resources
└── com
└── project
└── functions
└── ExtractCsvMessageTest
└── comma_delimited.json

这里有类似的问题,但我找不到任何解决这个问题的方法。

此外,我正在使用 VSCode,我只是从 resources 手动创建了路径。

最后,我的.classpath

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="bin/main" path="src/main/java">
<attributes>
<attribute name="gradle_scope" value="main"/>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="bin/main" path="src/main/resources">
<attributes>
<attribute name="gradle_scope" value="main"/>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8/"/>
<classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer"/>
<classpathentry kind="output" path="bin/default"/>
<classpathentry kind="src" path="src/test/java" output="build/classes/test">
<attributes>
<attribute name="test" value="true" />
</attributes>
</classpathentry>
</classpath>

tl:dr

为什么

final File commaDelimited = new File(classLoader.getResource(filename).getFile());

返回 null

最佳答案

正如所怀疑的那样,这是一个类路径问题。

我在 VSCode 中解决了这个问题,方法是使用 Cmd + Shift + P 触发命令面板并选择

Java:清理 Java 语言服务器工作区

这又更新了 .classpath 文件。

退出并再次启动 VSCode 后,一切又恢复正常了。

关于java - classLoader.getResource(filename) 不返回存在的文件(返回空),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63267106/

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