Ank*_*kit 2 java fileinputstream fileoutputstream
public class JavaCopyFileProgram {
public static void main(String[] args)
{
File sourceFile = new File("F:/Study/Java/Java Programs/Factory Methods.txt");
File destFile = new File("D:/DestFile.txt");
FileInputStream inStream = null;
FileOutputStream outStream = null;
try
{
inStream = new FileInputStream(sourceFile);
outStream = new FileOutputStream(destFile);
byte[] buffer = new byte[1024];
int length;
while ((length = inStream.read(buffer)) != -1)
{
outStream.write(buffer, 0, length);
}
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
inStream.close();
outStream.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
System.out.println("Success");
}
}
Run Code Online (Sandbox Code Playgroud)
我无法理解 thw write() 方法是如何工作的?当它第一次被调用时,它正在将 cotents 从 0 索引写入字节数组的长度,但是当它第二次被调用时,它如何将新文本附加到前一个文本的末尾?它应该覆盖以前的内容,因为再次使用 0 作为起始索引调用 write。如果我理解错了,请帮助我?
write 方法中的起始偏移量不是指 中的偏移量,FileOutputStream而是指从中写入的数组中的偏移量。
您可以阅读(而不是)应该如何使用该方法的文档OutputStream。FileOutputStreamwrite
对于您的特定write方法调用
outStream.write(buffer, 0, length);
Run Code Online (Sandbox Code Playgroud)
这意味着:“从下一个字节开始写出buffer流的内容”。outStreambuffer[0]length
第二个和第三个参数指的是数组的边界。该方法将写入buffer[0]到buffer[length - 1]。并且由于您inStream一次又一次地读取(参见while循环的开头), 的内容buffer将填充来自该输入流的连续字节。结果操作是这里的文件副本。