我有一个要保存 html 的 url 列表,我希望文件名是 url。
番石榴中是否有任何内置方法可以确保文件名可以安全保存?
您所说的“安全保存”是什么意思还不是很清楚。您可以使用CharMatcher.matchesAllOf
来确保 URL 仅包含特定的安全字符,或者在几周后发布的 Guava 14 中,您可以使用BaseEncoding.base64Url()
base64 将 URL 编码为绝对安全的字符串。
要回答您的字面问题,不,没有这样的内置方法。事实上,我能找到的最接近的,com.google.common.io.Files.simplifyPath()
特别带有警告,它可能“并不总是与文件系统的行为相匹配”。
CharMatcher
路易斯想出的主意是个好主意。有关这方面的更多信息,请参阅 Guava 的wiki及其Javadoc。根据您的特定文件命名规则构建自己的匹配器应该相对简单。
这是一个假设您使用 Windows/NTFS 的示例。在 NTFS 上:
文件和目录名称最长可达 255 个字符,包括任何扩展名。名称保留大小写,但不区分大小写。NTFS 不区分大小写的文件名。名称可以包含除以下字符外的任何字符:
? " / \ < > * | :
在 Windows 上,Microsoft 建议跳过所有这些,以及值介于 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);
}