【问题标题】:Convert between URL and windows filename (Java)?在 URL 和 windows 文件名 (Java) 之间转换?
【发布时间】:2010-12-11 18:27:51
【问题描述】:

在 Java 中,有没有一种标准/好的方法在 url 和 windows 文件名之间进行转换?

我正在尝试下载文件,但我希望 Windows 文件名可以转换回原始文件名。请注意,url 的查询部分至关重要,因为我将下载仅在查询上有所不同的不同页面。

我目前的 hacky 解决方案是用特定字符串(例如“QQ”)替换非法字符(例如“?”),但这会降低转换回 url 的透明度。有没有更好的办法?

【问题讨论】:

  • 您尝试完成的一些示例将非常有帮助。
  • 我认为他是在谈论通过使用 Web URL 作为文件名来保存 Web 请求的结果。这会遇到诸如“*”和“?”之类的字符问题,它们在 URL 中有效,但作为 Windows 文件名的一部分无效。
  • 即www.google.com/search?q=bad+urls,这不是有效的 Windows 文件名(由于问号)。

标签: java windows file url


【解决方案1】:

但是有可能将 url 编码为文件名吗?我的意思是,能有 100% 有效的解决方案吗?我认为将 url 转换为文件名通常是错误的想法,因为对 url 和文件名设置了不同的限制:

Max filename length (NTFS filesystem, Unicode, using UTF-16 encoding) - 255

Max URL length (using UTF-8 encoding?) - 2000 chars

【讨论】:

    【解决方案2】:

    您可能比使用URLEncoder 编码 URL 更糟糕:

    String url = "http://172.0.0.1:80/foo/bar/baz.txt?black=white";
    String filename = URLEncoder.encode(url, "UTF-8");
    File file = new File(filename);
    

    文件名成为合法的win32名称:

    http%3A%2F%2F172.0.0.1%3A80%2Ffoo%2Fbar%2Fbaz.txt%3Fblack%3Dwhite
    

    这是一个可逆操作:

    String original = URLDecoder.decode(filename, "UTF-8");
    

    【讨论】:

      【解决方案3】:

      如果您打算将编码的 URL 转换为非编码器,您可以使用:

      URLDecoder

      HTML 表单解码的实用程序类。此类包含用于从 application/x-www-form-urlencoded MIME 格式解码字符串的静态方法。

      看看是不是你需要的。

      【讨论】:

      • @Paul:添加一些输入样本和所需输出以更好地理解您的问题
      【解决方案4】:

      java.io.File 类接受一个 URI &|文件名作为构造函数,但包含toURI() & toURL() 方法以及getName() & getPath()。我认为这对您来说是一个有效的转换?

      【讨论】:

        猜你喜欢
        • 2012-01-07
        • 1970-01-01
        • 2011-09-04
        • 2015-04-16
        • 1970-01-01
        • 2023-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多