我有一个关于java和文件输入/输出的问题。 对于特定的任务,我必须在打开时传输一个文件(精确到excel)。 想象下面的场景:
一个用户打开并使用excel文件。有时,用户手动保存文件。现在我想写一个java程序,它读取文件并每隔30秒通过套接字传输一次。到目前为止没问题。我的问题:如果用户在我的程序想要读取文件的确切时刻保存文档会发生什么。这会引起什么麻烦吗?
不知道是否重要,但我使用BufferedInputStream来读取文件。
答案 0 :(得分:1)
AFaik,行为将取决于您的底层文件系统/操作系统。 unix系统通常保留正在读取的文件的“未命名”副本,并使用inode技巧开始为“正在写入”的新副本创建新文件。旧的Windows系统可能会回复该文件无法写入,因为它已被锁定。我不了解现代Windows系统。
答案 1 :(得分:1)
我的问题:如果用户在我的程序想要读取文件的确切时刻保存文档会发生什么。这会引起什么麻烦吗?
是
根据您的平台以及Excel文件的保存方式,可能会发生以下一种或多种情况。
如果Excel使用锁定,则Excel或尝试读取该文件的程序可能会收到错误消息,指出该文件正在使用中。
如果Excel进行了重写并且没有锁定文件,那么尝试读取该文件的程序可能会看到截断的Excel文件。
如果Excel写入新文件并重命名,则尝试读取该文件的程序可能会看到一个状态 文件显然不存在。
它可以工作。
简而言之,读书的程序需要非常防守......
不知道是否重要,但我使用BufferedInputStream来读取文件。
我认为那是无关紧要的。
答案 2 :(得分:1)
你能做什么我认为在你做任何事情之前总是要检查文件的状态。就像之前的一些帖子所说的一样,这一切都取决于底层平台,你应该采用大量的防御性编程......