黑马程序员技术交流社区
标题:
关于io中的read方法
[打印本页]
作者:
宋美成
时间:
2014-5-4 12:56
标题:
关于io中的read方法
本帖最后由 宋美成 于 2014-5-8 12:46 编辑
大家有木有发现,io中的read()它返回的是int型的数值,这个很诡异啊,当我使用read方法读取一个文件中的字符,在用write写到另一个文件中的时候:while((ch=fr.read())!=-1);
{
fw.write(ch);
}
我突然就不明白了啊,ch他存放的是一个int型的数据,而我在用write的时候,写入的内容不也就变成了int型数据,和原来的字符型数据不配啊,但是真正实现的时候又是对的,求大神指导,这个原理是什么啊?
作者:
Lin0411
时间:
2014-5-4 13:10
InputStream中的read() 是从输入流中读取数据的下一个字节。注意,是字节,返回的是一个32位的int型数据,而OutputStream中的write(int b)本身写入的就是一个32位的数据,所以没有问题。
作者:
Lin0411
时间:
2014-5-4 14:27
打错了,应该是传入一个32位的int型数据作为参数,而真正只写入其中低八位数据。
作者:
ò壞尛孩
时间:
2014-5-4 17:17
write
public void write(int c)
throws IOException写入单个字符。要写入的字符包含在给定整数值的 16 个低位中,16 高位被忽略。
用于支持高效单字符输出的子类应重写此方法。
读取的时候类型被提升,写入的时候类型截取低16位!
作者:
李彦来
时间:
2014-5-8 07:47
read()是读取字符的个数,ch有多少,对应的write()方法就写多少
作者:
thinkervsruler
时间:
2014-5-8 10:01
本帖最后由 thinkervsruler 于 2014-5-8 10:47 编辑
IO字符流的读取,基本上都是基于Reader中read()方法,LZ可以参考API此方法的文档说明
int read() ,读取单个字符,并返回读取到的字符,但是是以int类型返回的,到文件末尾则返回-1
而write()方法也可以接收int型的数据,void write(int c),写入单个字符,
接收一个int型参数后,writer方法内部会将int型的单个字符自动强转成char型的字符
下面有一个简单的文本文件的复制,您可参考下:
/*
需求:完成文本文件的复制,
1.创建写入流并新建一个文本文件,用于存储数据
2.创建读取流,关联目标文件
3.通过反复循环完成读写操作
4.关闭输入输出流
*/
import java.io.*;
class CopyTest1
{
public static void main(String[] args)
{
FileWriter writer = null;
FileReader reader = null;
try
{
writer = new FileWriter("E:\\FileWriter副本.txt");
//这里读取的文件,要实际存在才可以,运行时请改成自己硬盘下的文本文件路径
reader = new FileReader("E:\\FileWriter.txt");
int ch = 0;
while((ch = reader.read()) != -1)
{
//ch是int型,所以写入时要通过(char)强转成字符型
writer.write(ch);
writer.flush();
}
}
catch (IOException e)
{
System.out.println("文件读写失败");
}
finally
{
try
{
if(writer != null)
writer.close();
}
catch (IOException e)
{
System.out.println("文件写入失败");
}
try
{
if(reader != null)
reader.close();
}
catch (IOException e)
{
System.out.println("文件读取失败");
}
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2