在Java中如何转换URL和Windows文件名?

17

是否有一种标准/良好的方法可以在Java中在URL和Windows文件名之间进行转换?

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

我的当前解决方案是用特定字符串(如“QQ”)替换非法字符(如“?”),但这使得转换回url不够透明。是否有更好的方法?


1
一些你想要实现的例子会非常有帮助。 - Jim Garrison
1
我认为他在谈论通过使用Web URL作为文件名保存Web请求结果。这会遇到一些问题,例如'*'和'?'这样的字符,在URL中是有效的,但作为Windows文件名的一部分则无效。 - James Van Huis
4个回答

24
你可以使用URLEncoder对URL进行编码,这是一个不错的选择: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");

2
Java.io.File类可以通过URI或文件名作为构造函数参数,同时还包含toURI()、toURL()、getName()和getPath()方法。我认为这对您来说应该是一个有效的转换,您是否同意?

2

0
如果您想将URL编码转换为非编码格式,可以使用以下方法: URLDecoder 引用:
HTML表单解码的实用类。该类包含用于从application/x-www-form-urlencoded MIME格式解码字符串的静态方法。
请查看是否符合您的需求。

@Paul:请提供一些输入和期望输出的示例,以更好地理解您的问题。 - OscarRyz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接