为了在用户提供的文件的文件系统名称中生成一些唯一性,我生成一些其他用户提供的数据的哈希值(在这种情况下是用户的IP地址和随机整数),并在其前面添加文件名。我选择了SHA-1算法来执行此哈希。不幸的是,字符串从
返回md = MessageDigest.getInstance("SHA-1");
// Add values to the digest
String ipAddrHash = new String(md.digest());
...当然包含各种奇怪的奇异字符,其中大部分都不允许存在于文件名中。
所以,要么:
答案 0 :(得分:3)
您可以encode the bytes in hexadecimal获取可打印的文件名。但是你的算法并不能保证唯一性。
或者您可以简单地使用UUID或从数据库序列返回的序列号。
答案 1 :(得分:2)
尝试:
String filename=UUID.randomUUID().toString()
答案 2 :(得分:1)
如果只有唯一性,请使用java.util.UUID
。 FWIW,我有类似的要求,这是我用来解决它(在Linux和Windows上运行的软件)。 UUID只包含字母数字和连字符,因此不存在与文件系统不兼容的问题,并保证唯一性。
答案 3 :(得分:0)
您可以使用Base32或Base64对返回的String进行编码,并将“/”字符替换为安全字符(例如:“_”)。