在Java中,是否有一种在urls和windows文件名之间进行转换的标准/好方法?
我正在尝试下载文件,但我希望Windows文件名可以转换回原始文件名。请注意,网址的查询部分至关重要,因为我将下载仅在查询中不同的不同网页。
我目前的hacky解决方案是使用特定字符串(例如“QQ”)替换非法字符(例如“?”),但这会使转换回url的透明度降低。还有更好的方法吗?
答案 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
答案 3 :(得分:0)
如果您要转换编码为非编码器的网址,您可以使用:
用于HTML表单解码的实用程序类。此类包含用于从application / x-www-form-urlencoded MIME格式解码String的静态方法。
看看这是否是你需要的。