https://blog.csdn.net/sds15732622190/article/details/78416824
测试了这个博客的代码,可以运行。
稍微加了点东西。
原来的代码能够完美复制中英文数字,添加了in1和新文件之后发现,复制的内容是新文件的,但是复制的内容不完整。
原因:
1、复制文件内容的步骤是:将文件内容复制到缓冲区(数组bytes)——>从缓冲区复制到新文件。缓冲区只有一个,所以只能把最后一个写入缓冲区的文件写入新文件。所以只复制了测试1.txt
(此时测试.txt的内容是“测试”,测试1.txt的内容是“另一个文件”)
2、写入缓冲区需要字节数组,但是本例中的字节数组的大小和测试.txt一致,所以当测试1.txt的内容更长时,无法复制全部内容。
如果测试.txt比测试1.txt长,则会替换一部分缓冲区内的数据
如:
测试.txt的内容是“一个长的字符串”
测试1.txt的内容是“短的”
则输出内容是“短的长的字符串”
可见前两个字被覆盖了。
如果测试.txt中写了中文字符串,被很短的数字覆盖了一部分,则会出现乱码
如果是用3个数字来覆盖(数字的长度是汉字长度的整数倍)则会正常覆盖不乱码
从控制台向文件输入内容:
outputstream只能从字节数组向文件输出数据,所以要把内容转换成字节数组再用outputstream来输出
只要arr的编码方式和系统一致就能往文件输入任意中英文数字。
nextline输入的所有东西都是字符串,所以输入数字时不用单独考虑将其转化为字符数组
IO Stream作用于字节
Reader和Write作用于字符,只能读取文本
InputStream是Reader的子类,通常不会直接用Reader类
Writer和OutputStream同理