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

有没有一个标准的/好的方式之间转换urlWindows文件名,在Java中?

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

我目前的解决方法是用特定的string(如“QQ”)replace非法字符(如'?'),但是这使得转换回url不那么透明。 有没有更好的办法?

Solutions Collecting From Web of "在URL和Windows文件名(Java)之间转换?"

你可能会比使用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"); 

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

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

最大文件名长度(NTFS文件系统,Unicode,使用UTF-16编码) – 255

最大URL长度(使用UTF-8编码?) – 2000个字符

如果你的意思是转换一个URL编码为非编码器,你可以使用:

URLDecoder

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

看看这是你需要的。