在手动保存文件时用java读取文件

时间:2011-03-16 13:24:09

标签: java file-io

我有一个关于java和文件输入/输出的问题。 对于特定的任务,我必须在打开时传输一个文件(精确到excel)。 想象下面的场景:

一个用户打开并使用excel文件。有时,用户手动保存文件。现在我想写一个java程序,它读取文件并每隔30秒通过套接字传输一次。到目前为止没问题。我的问题:如果用户在我的程序想要读取文件的确切时刻保存文档会发生什么。这会引起什么麻烦吗?

不知道是否重要,但我使用BufferedInputStream来读取文件。

3 个答案:

答案 0 :(得分:1)

AFaik,行为将取决于您的底层文件系统/操作系统。 unix系统通常保留正在读取的文件的“未命名”副本,并使用inode技巧开始为“正在写入”的新副本创建新文件。旧的Windows系统可能会回复该文件无法写入,因为它已被锁定。我不了解现代Windows系统。

答案 1 :(得分:1)

  

我的问题:如果用户在我的程序想要读取文件的确切时刻保存文档会发生什么。这会引起什么麻烦吗?

根据您的平台以及Excel文件的保存方式,可能会发生以下一种或多种情况。

  • 如果Excel使用锁定,则Excel或尝试读取该文件的程序可能会收到错误消息,指出该文件正在使用中。

  • 如果Excel进行了重写并且没有锁定文件,那么尝试读取该文件的程序可能会看到截断的Excel文件。

  • 如果Excel写入新文件并重命名,则尝试读取该文件的程序可能会看到一个状态 文件显然不存在。

  • 它可以工作。

简而言之,读书的程序需要非常防守......


  

不知道是否重要,但我使用BufferedInputStream来读取文件。

我认为那是无关紧要的。

答案 2 :(得分:1)

你能做什么我认为在你做任何事情之前总是要检查文件的状态。就像之前的一些帖子所说的一样,这一切都取决于底层平台,你应该采用大量的防御性编程......