有没有一个标准的/好的方式之间转换url和Windows文件名,在Java中?
我正在尝试下载文件,但我希望Windows文件名可以转换回原来的文件名。 请注意,url的查询部分是至关重要的,因为我将下载不同的页面,只有在查询不同。
我目前的解决方法是用特定的string(如“QQ”)replace非法字符(如'?'),但是这使得转换回url不那么透明。 有没有更好的办法?
你可能会比使用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的静态方法。
看看这是你需要的。