我有一个非常偶发的过程,我正在创建文件,由于我无法弄清楚,我得到一个“java.io.FileNotFoundException:File不是普通文件。”即使文件出现(在文件管理器和文本编辑器中)完全正常,也会出现异常。所以,我正在尝试重新创建这个错误并看看我如何处理它但是要做到这一点我需要手动创建一个会引发此异常的文件,我不知道我可以手动对文件做什么它以这种方式突然变得“破碎”。
我意识到,无论我对文件做什么与抛出我的异常的文件不一样,但是为了编写可测试代码以验证我的安全保护代码是否有效,这不会问题......我只需要一个破损的文件。我想我可以在一些随机周期中手动抛出异常,但我希望我能让它更“逼真”。
所有帮助表示赞赏。
答案 0 :(得分:3)
我认为您可能看错了,特别是如果文件根据文本编辑器实际上没有损坏。
您应该已经发布了整个堆栈跟踪。我怀疑问题不在于文件,而在于路径名称
您是否在获得例外时尝试了File#isfile()的结果?
来自javadoc(我的重点)
public boolean isFile()
测试此抽象路径名表示的文件是否为 普通文件。 文件是正常的,如果 它不是目录,并且在 另外,满足其他系统依赖标准。任何非目录 由Java应用程序创建的文件保证是普通文件。
我怀疑File#isfile()
会在异常之前返回false
,您应该查看此API而不是尝试破坏文件
答案 1 :(得分:2)
损坏的文件仍然是文件。例如,损坏的Word文档仍然是文件但无法使用文字处理程序打开,因为它的内容不可读。
此处抛出异常:
public FilePartSource(File file) throws FileNotFoundException {
66 this.file = file;
67 if (file != null) {
68 if (!file.isFile()) {
69 throw new FileNotFoundException("File is not a normal file.");
70 }
71 if (!file.canRead()) {
72 throw new FileNotFoundException("File is not readable.");
73 }
74 this.fileName = file.getName();
75 }
76 }
并且当你的文件不是文件而是其他东西(目录?指向不存在的文件的链接?)时会发生这种情况。
答案 2 :(得分:1)
如果要破坏现有文件,只需编写一个打开文件并对字节进行加扰的函数。您也可以使用十六进制编辑器执行此操作。如果你想生成垃圾文件,你可以创建一个新文件并将random.nextBytes()写入其中。