将url转换为安全文件名

时间:2012-12-01 06:22:19

标签: java guava

我有一个我保存html的网址列表,我希望文件名是网址。

guava中是否有任何内置方法可以确保文件名可以安全保存?

2 个答案:

答案 0 :(得分:3)

“保存安全”的含义并不十分清楚。您可以使用CharMatcher.matchesAllOf来确保URL仅包含特定的安全字符,或者在Guava 14中,这将在几周内发布,您可以使用BaseEncoding.base64Url()对URL进行base64编码,以确保安全字符串。

答案 1 :(得分:1)

要回答你的文字问题,不,没有这样的内置方法。事实上,the closest one I could findcom.google.common.io.Files.simplifyPath()特别提到警告,它可能“并不总是与文件系统的行为相匹配。”

路易斯提出的CharMatcher想法很好。有关详细信息,请参阅Guava的wiki及其Javadoc。根据您的特定文件命名规则构建自己的匹配器应该相对简单。

这是假设您正在使用Windows / NTFS的示例。 On NTFS

  

文件和目录名称最长可达255个字符,包括任何扩展名。名称保留大小写,但不区分大小写。 NTFS根据大小写不区分文件名。名称可以包含除以下内容之外的任何字符:

     
?  "  /  \  <  >  *  |  :

在Windows上,Microsoft recommends跳过所有内容,以及值为0-31(包括0-31)的字符。所以你最终会得到这样的东西:

public boolean isSafeFilename(String url) {
    CharMatcher ntfsMatcher = CharMatcher.noneOf("?\"/\\<>*|:");
    char zero = 0;
    char thirty-one = 31;
    CharMatcher windowsMatcher = CharMatcher.inRange(zero, thirty-one);
    CharMatcher ntfsWindows = ntfsMatcher.and(windowsMatcher);

    return ntfsWindows.matchesAllOf(url);
}