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