两个流和一个文件

时间:2017-08-06 23:33:07

标签: java inputstream java-io outputstream

如果使用默认构造函数创建类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或文件系统如何处理这种情况?

1 个答案:

答案 0 :(得分:0)

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

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

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