在URL和Windows文件名(Java)之间转换?

时间:2009-10-30 21:40:53

标签: java windows file url

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

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

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

4 个答案:

答案 0 :(得分:23)

您可能比使用URLEncoder对网址进行编码更糟糕:

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");

答案 1 :(得分:2)

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

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:0)

如果您要转换编码为非编码器的网址,您可以使用:

URLDecoder

  

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

看看这是否是你需要的。