Java中IO流的输入/输出

开发工具与关键技术:MyEclipse 10、Java jdk
作者:欲望
撰写时间:2019年4月26日

下面让我们了解一下IO流,什么是IO流呢!IO(输入/输出)是比较抽象的,看不到明显的运行效果,但输入和输出是所有程序都必需的部分。输入,使用输入机制,读取外部数据;输出,使用输出机制,将程序数据输出到磁盘、光盘的存储设备。
一、流按几种类型分类:
1、 按流的流向来分,可以分为输入流和输出流。
输入流:只能从中读取数据,而不能向其写入数据。由InputStream和Reader作为基类。
输出流:只能向其写入数据,而不能从中读取数据。由OutputStream和Writer作为基类。
2、 按字节来分,可以分为字节流和字符流。
字节流:字节流操作的数据单元是8位的字节,由InputStream和OutputStream作为基类。
字符流:字符流操作的数据单元是16位的字节,由Reader和Writer作为基类。
3、 按流的角色来分,可以分为节点流和处理流。
节点流:可以从一个特定的IO设备(如磁盘、网络)读/写数据的流。也被称为低级流。
处理流:用于对一个存在的流进行连接或封装,通过封装后的流来实现数据读/写功能。也称位为高级流。
二、下面我们用InputStream类来进行数据的输入
注意:这里进行字节数据的读取,有可能出现乱码。出现乱码的原因,第一:保存的文件语言格式和编译器的读取的语言格式不同。第二:创建缓存数据一般都是1026或者3的整数倍,但这个数一定要尽量大,不然也有可能出现乱码。因为一个汉语是三个字节,所有要求是三的整数倍。

public class InputStreamDemo{
pubile static void main(String[] args){
try{ 
//创建流
InputStream in=new FileInputStream("E:\Java资料\20190420\思考致富测试.txt");//这里会抛出FileNotFoundException异常,文件路径不建议使用中文格式
//创建缓存数组
byte[] ab=new byte[1026];
//存放读取的字节数
int count=0;
//读取数据
while((count=in.read(ab,0,ab.length))!=-1){
System.out.println(new String(ab,0,count,Charset.forName(“UTF-8”)));//这里会抛出IOException异常
//如何编译器的语言格式和你文本的语言格式一致的
System.out.println(new String(ab,0,count));}
//用完流,要记得关闭
in.close();
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
}

输入结果如下图:
在这里插入图片描述
InputStream和Reader的方法基本一致,只能InputStream读取的是字节,使用的参数是byte数组(byte[]),而Reader读取的是字符,使用的参数是char数组(char[])InputSteam和Reader都是抽象类,本身不能创建实例,但他们分别有一个用于读取文件的输入流:FileInputStream和FileReader,他们都是节点流需要直接和指定文件关联。
三、通过Writer类进行数据的输出

public class WriterDemo{
public static void main(String[] args){
//声明字符串
String str=”征服自己是最大的胜利,被自己所征服是最大的耻辱和邪恶。对待自己的缺点,要像也要像敌人一般严厉。想做好一件事永远也不要嫌麻烦!”;
try{  
//创建IO流
writer write=new FileWriter("E:\Java资料\20190420\测试1.txt");//这里会抛出IOException异常
//写入数据
writer.writer(str);
//相比OutputStream,Writer多了append方法
writer.flush();//刷新该流的缓冲
writer.close();//关闭流
}catch(IOException e){
e.printStackTrace();
}
}
}

输出结果如下:
在这里插入图片描述
OutputStream和Write是所有输出流的基类,他们的方法也是非常类似的,他们的方法是所有输出流都可使用的方法。
总结:IO流主要分为输出流、输入流、字节流、字符流、处理流和节点流。其中字节流和字符流的区别,先说说字节流的输入是通过InputStream类来创建IO流的,用byte[]类型来存储数据;而字符的流输入是Reader类来创建IO流,用char[]类型来存储数据。这里值的注意的是byte[]的长度一把建议都是1026或者尽量大一点的三的整数倍的数,char[]的是一个字符类型的这个建议是1026。字符的输出流和字节的输入流其实也是差不多的,而字符的输出流的Writer这个类还添加了append()功能。还有最重要的一点是在是用IO流的时候,用完流一定要关闭流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值