2

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

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

4

2 回答 2

3

您所说的“安全保存”是什么意思还不是很清楚。您可以使用CharMatcher.matchesAllOf来确保 URL 仅包含特定的安全字符,或者在几周后发布的 Guava 14 中,您可以使用BaseEncoding.base64Url()base64 将 URL 编码为绝对安全的字符串。

于 2012-12-01T15:43:08.243 回答
1

要回答您的字面问题,不,没有这样的内置方法。事实上,我能找到的最接近的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);
}
于 2012-12-06T22:45:19.847 回答