gpt4 book ai didi

java - 寻找有关 java.net.URL 不一致/错误解决方法的建议

转载 作者:行者123 更新时间:2023-12-02 05:50:57 26 4
gpt4 key购买 nike

以下代码暴露了该错误,我知道我可以跟踪 getFile() 和 getPath() 的结果,但我正在寻找更优雅和健壮的东西。我希望能够默认情况下遍历包含 jar 中的文件夹,并使用用户选择/配置路径来查找和加载资源。

import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.net.URL;

public class UrlBug {

UrlBug() {
try {
final URL resourceRoot = this.getClass().getClassLoader().getResource(".");
System.out.println(resourceRoot.getFile());
System.out.println(resourceRoot.getPath());
System.out.println(resourceRoot.toURI());
System.out.println(resourceRoot.toExternalForm());
System.out.println(resourceRoot.toString());
new URL(resourceRoot.getFile());
} catch (final URISyntaxException e) {
e.printStackTrace();
} catch (final MalformedURLException e) {
e.printStackTrace();
}
}
public static void main(final String[] args) {
new UrlBug();
}
}

下面带有“bug”的输出

/C:/Users/Me/workspaces/.../target/classes/            <-- Malformed filename
/C:/Users/Me/workspaces/.../target/classes/ <-- Malformed path
file:/C:/Users/Me/workspaces/.../target/classes/
file:/C:/Users/Me/workspaces/.../target/classes/
file:/C:/Users/Me/workspaces/.../target/classes/

java.net.MalformedURLException: no protocol:
/C:/Users/Me/workspaces/scratch/target/classes/ at
java.net.URL.<init>(URL.java:585) at
java.net.URL.<init>(URL.java:482) at
java.net.URL.<init>(URL.java:431) at
scratch.UrlBug.<init>(UrlBug.java:20) at
scratch.UrlBug.main(UrlBug.java:39)

我已经准备好接受我的代码中存在该错误。不过我认为这是 URL 类和 Kohsuke 的问题。似乎agree

最佳答案

我不确定你为什么要自己遍历 jar 目录结构。 Java 有现有的类专门用于处理这种情况。要修复您的代码,您只需使用 toString() 方法即可:

new URL(resourceRoot.toString());

“file:/”前缀是“协议(protocol)”。使用 toString() 方法可以保证“file:/”协议(protocol)被添加到字符串前面。根据文档:

Protocol handlers for the following protocols are guaranteed to exist on the search path:

http, https, ftp, file, and jar

http://docs.oracle.com/javase/7/docs/api/java/net/URL.html#URL(java.lang.String, java.lang.String, int, java.lang.String)

关于java - 寻找有关 java.net.URL 不一致/错误解决方法的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23544883/

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