【问题标题】:In Java, how can I avoid an HTTP 404 getting a file:// URL with special characters in it?在 Java 中,如何避免 HTTP 404 获取包含特殊字符的 file:// URL?
【发布时间】:2010-10-31 19:26:26
【问题描述】:

首先我在这里提供一个小代码sn-p:

String path = "".equals(url.getPath()) ? "/" : url.getPath();
java.io.File f = new java.io.File(path);

if (!f.exists()) {
    this.code = 404;  // http Not Found
    return;
}

这里,URL的类型是java.net.URL,它的值是这样的格式:

file:///directory1/directory2.../filename

上述代码在处理一般 URL 时 90% 的时间都有效,但当文件名中包含特殊字符时它会失败。例如:

/tmp/Marissafolli/Receptionist/Administrative Assistant/Marissa's Resume.txt.txt

这样的 URL 将报告“404”代码,即使它们存在。以下版本适用于这些特殊情况:

java.io.File f = new java.io.File(url.toURI());

url.toURI() 仅在 j2SE 1.5.0 中。所以我需要使用第一个版本。我怎样才能让它发挥作用?

【问题讨论】:

  • 原始网址是从哪里来的?

标签: java url file http-status-code-404


【解决方案1】:

这不是错误,而是它不是有效的 URL。

对于初学者,您显然需要将这些空白escape 放入 %20。我不知道你用撇号做什么。 This blog 建议它应该成为 %27。试试看。

或者试试java.net.URLEncoder 看看它能给你带来什么。

【讨论】:

  • 我不相信您可以使用 URLEncoder,因为它会编码 所有内容,包括“://”字符。 Java 本身没有一个类来进行必要的编码。
  • 你可能是对的,埃迪。我自己没试过。我只是在寻找 API 中可能有帮助的东西。也许这不是一个好主意。
【解决方案2】:

为什么不先构造一个 URI,然后调用 toURL() 方法。更多信息here

[UPDATE] 或者更好的是,为什么不在 File 的构造函数中直接使用 URI,因为 URI 类会为您处理编码。

【讨论】:

    猜你喜欢
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    • 2011-06-02
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多