两个流和一个文件

Two streams and one file

如果我使用默认构造函数创建 class FileInputStream 和 FileOutputStream 的两个实例,并作为参数指定相同的路径和文件名,将会发生什么。

 FileInputStream is = new FileInputStream("SomePath/file.txt");  
 FileOutputStream os = new FileOutputStream("SamePath/file.txt");

假设我们在文件 "file.txt" 中有几个字符串。接下来,我尝试使用循环从 file.txt 读取字节并将它们写入相同的 file.txt 每次迭代,如下所示:

 while (is.available()>0){
      int data = is.read();
      os.write(data);
    }
    is.close();
    os.close();

问题是,当我尝试 运行 我的代码时,file.txt 中的所有文本都被擦除。当两个或多个流尝试处理同一个文件时会发生什么? Java 或文件系统如何处理这种情况?

这取决于您的操作系统。在 Windows 上 new FileOutputStream(...) 可能会失败。在 Unix-line 系统上,您将获得一个新文件,而旧文件仍然可读。

但是你的复制循环是无效的。 available() 不是对流结束的测试,也不是用于其他目的。你应该使用这样的东西:

byte[] buffer = new byte[8192];
int count;
while ((count = in.read(buffer)) > 0)
{
    out.write(buffer, 0, count);
}