java.io接口_Java IO 接口--- 字节操作 字符操作 磁盘操作 网络操作

1、IO类库的基本结构

基于字节操作的IO接口分别是InputStream和OutputStream,InputStream的类结构图如下所示:

9b1f7beb0f96662ff8d2fbfe7ed4b9cb.png

同InputStream类似,OutputStream类也有着相同的类结构图。

fced8b61fccca1cbf68285ef0abccba2.png

关于各个子类的使用可以参考JDK 的 API 说明文档,这里我们需要注意的是:操作数据的方式是可以组合的,如下所示:

InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream("h:\\haha.txt"), "utf-8");

从上面代码可以看出,InputStreamReader可以从FileInputStream中读取数据,从源码中可以看出来,其实不仅是InputStreamReader,所有的IO类都可以以这种方式来组合使用。

08b0ed91360b2166b63dd9834d1cfffb.png

还有一点需要注意的是必须制定流最终写入到什么地方,是磁盘还是网络,从OutputStream类图中可以看出,写入网络中实际也是写文件操作,只不过底层是通过网络传输了。

2、 基于字符的IO操作接口

不管是磁盘还是网络数据传输,都是以字节为单位的,但是程序中一般常见的数据操作都是以字符为单位的(Java中char占用2字节,C/C++中 char占用1字节),这就需要我们有一个操作字符的IO接口,来处理字符与字节见的编码转换问题,也就是Write和Reader接口及其实现类,他们 二者的类接口图如下:

bc37b002cbc93c0f8941ab4129d59297.png

4f099207b88a7bd982ca57e587805380.png

读字符接口Reader的最主要操作方法为read(),其读取字符并返回读取的字符数,不管是 Writer 还是 Reader 类它们都只定义了读取或写入的数据字符的方式,也就是怎么写或读,但是并没有规定数据要写到哪去(比如磁盘或者网络)。

3、字节与字符的转化接口

有时数据持久化和网络传输是以字节进行的,所有需要字节和字符之间的相互转换。

a89b6cdfb8780c7a1b0d23d03ce6736a.png                   

d9e8e86dc932a7a2e5d51200c4ccd51a.png

/*** 使用FileReader进行读取文件*/@Testpublic void testFileReader() throwsIOException {

FileReader fileReader= new FileReader("h:\\haha.txt");char[] buff = new char[512];

StringBuffer stringBuffer= newStringBuffer();while (fileReader.read(buff) > 0) {

stringBuffer.append(buff);

}

fileReader.close();

System.out.print(stringBuffer.toString());

}/*** 使用FileReader进行读取文件,然后FileWriter写入另一个文件*/@Testpublic void testFileReaderAndFileWriter() throwsIOException {

FileReader fileReader= new FileReader("h:\\haha.txt");char[] buff = new char[512];

StringBuffer stringBuffer= newStringBuffer();while (fileReader.read(buff) > 0) {

stringBuffer.append(buff);

}

System.out.println(stringBuffer.toString());

FileWriter fileWriter= new FileWriter("h:\\haha2.txt");

fileWriter.write(stringBuffer.toString().trim());

fileWriter.close();

System.out.println("写入文件成功");

}/*** 使用InputStreamReader进行读取文件*/@Testpublic void testInputStreamReader() throwsIOException {

InputStreamReader inputStreamReader= new InputStreamReader(new FileInputStream("h:\\haha.txt"), "utf-8");char[] buff = new char[512];

StringBuffer stringBuffer= newStringBuffer();while (inputStreamReader.read(buff) > 0) {

stringBuffer.append(buff);

}

System.out.println(stringBuffer.toString());

}

@Testpublic void testIntputStream2() throwsIOException {

InputStreamReader inputStreamReader= new InputStreamReader(new StringBufferInputStream("hello world"));char[] buff = new char[512];int n =inputStreamReader.read(buff);

System.out.println(n);

System.out.println(buff);

}/*** 使用inputStreamReader进行读取文件,然后OutputStreamWriter写入另一个文件*/@Testpublic void testOutputStreamWriter() throwsIOException {

InputStreamReader inputStreamReader= new InputStreamReader(new FileInputStream("h:\\haha.txt"), "utf-8");char[] buff = new char[512];

StringBuffer stringBuffer= newStringBuffer();while (inputStreamReader.read(buff) > 0) {

stringBuffer.append(buff);

}

System.out.println(stringBuffer.toString());

OutputStreamWriter outputStreamWriter= new OutputStreamWriter(new FileOutputStream("h:\\haha2.txt"), "utf-8");

outputStreamWriter.write(stringBuffer.toString().trim());

outputStreamWriter.close();

}

注意:FileReader类继承了InputStreamReader,FileReader读取文件流,通过StreamDecoder解码成char,其解码字符集使用的是默认字符集。在Java中,我们应该使用File对象来判断某个文件是否存在,如果我们用FileOutputStream或者FileWriter打开,那么它肯定会被覆盖。

文件材料取自于:https://www.ibm.com/developerworks/cn/java/j-lo-javaio/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值