我有一个我保存html的网址列表,我希望文件名是网址。
guava中是否有任何内置方法可以确保文件名可以安全保存?
答案 0 :(得分:3)
“保存安全”的含义并不十分清楚。您可以使用CharMatcher.matchesAllOf
来确保URL仅包含特定的安全字符,或者在Guava 14中,这将在几周内发布,您可以使用BaseEncoding.base64Url()
对URL进行base64编码,以确保安全字符串。
答案 1 :(得分:1)
要回答你的文字问题,不,没有这样的内置方法。事实上,the closest one I could find,com.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);
}