gpt4 book ai didi

java - RenameTo 似乎随机失败

转载 作者:行者123 更新时间:2023-12-02 10:56:11 33 4
gpt4 key购买 nike

有很多关于 RenameTo 的帖子,但不幸的是,这些帖子似乎都不是我的问题或回答它:'(

我的问题是:我给我的程序一个文件,然后它应该加密它,计算加密文件的哈希值,并用这个哈希值重命名这个加密文件。为此,我首先创建名为“tmp”的加密文件,然后计算他的名字(在下面的代码中调用“myfile.setFileID()”),然后使用 RenameTo 对其进行重命名。

加密效果很好,哈希函数也很好(毫无疑问,在尝试实现它之前我使用了两者一段时间)。事实上,一切都运行良好......除了有时重命名失败。我不知道为什么。

这是我使用 RenameTo 的代码部分:

            //encrypt file:
File tmpEncryptedFile = Crypt.encrypt(originalFile, aesKey);

//set File ID and rename file:
myfile.setFileID(tmpEncryptedFile);
File encryptedFile = new File(myfile.getFileID());
if(!tmpEncryptedFile.renameTo(encryptedFile)) {
System.err.println("unable to rename file. Upload failed. Please try again.");
}

有时它工作得很好,有时我得到“无法重命名文件”。每次,tmp 文件都会正确创建,因此看起来确实来自 renameTo。另外,我现在已经运行了很多测试,它可能会失败或使用相同的文件输入(哦,除了即使对于相同的输入文件,加密的文件也不会相同,因为 key 是随机的.. .所以是的,RenameTo 的输入不一样,但我的意思是这不是“文件未找到”问题或来 self 的程序其他部分的问题)。

例如,我可以运行该程序多次,每次都给它相同的文件,第一次两次失败,第三次运行良好。或者我可以运行它 10 次,第 9 次运行良好,最后一次失败。由于失败似乎是随机的,我无法理解这里不起作用。

我读到我可能可以使用 Files.move() 代替,但对我来说使用 RenameTo() 似乎更“合乎逻辑”,我想了解这里出了什么问题。另外,Files.move() 使用路径,我只想在我的项目目录中完成它,这样文件名对我来说就足够了。

最佳答案

假设您的新文件名是 Base64 编码的哈希值,我很确定在新文件名包含 / 的情况下,重命名将会失败。当尝试将文件重命名为 "abc/def" 时,renameTo 会将 abc 部分解释为目录。由于此目录不存在,renameTo 将失败(它不会隐式创建它)。

关于java - RenameTo 似乎随机失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51722941/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com