IOStream读写文件操作

博客探讨了在Java中复制文件时遇到的问题,指出当使用相同缓冲区复制多个文件时,只会保留最后一个文件的内容。解释了原因在于缓冲区大小限制及文件内容长度不同导致的数据覆盖。还提到了字符编码与控制台输出的注意事项,并强调了IOStream、Reader和Writer在处理字符和字节的区别。
摘要由CSDN通过智能技术生成

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同理

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值