网站打不开被拦截怎么办,wordpress定时任务原理,seo 海外,镇江网站外包java io流的学习总结~~流的概念和作用流是一组有顺序的#xff0c;有起点和终点的字节集合#xff0c;是对数据传输的总称或抽象。即数据在两设备间的传输称为流#xff0c;流的本质是数据传输#xff0c;根据数据传输特性将流抽象为各种类#xff0c;方便更直观的进行数据… java io流的学习总结~~流的概念和作用流是一组有顺序的有起点和终点的字节集合是对数据传输的总称或抽象。即数据在两设备间的传输称为流流的本质是数据传输根据数据传输特性将流抽象为各种类方便更直观的进行数据操作。
IO流的分类
根据处理数据类型的不同分为字符流和字节流根据数据流向不同分为输入流和输出流
字符流和字节流
字符流的由来 因为数据编码的不同而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时去查了指定的码表。
字节流和字符流的区别
读写单位不同字节流以字节8bit为单位字符流以字符16bit为单位根据码表映射字符一次可能读多个字节。处理对象不同字节流能处理所有类型的数据如图片、avi等而字符流只能处理字符类型的数据。字节流一次读入或读出是8位二进制。字符流一次读入或读出是16位二进制。
设备上的数据无论是图片或者视频文字它们都以二进制存储的。二进制的最终都是以一个8位为数据单元进行体现所以计算机中的最小数据单元就是字节。意味着字节流可以处理设备上的所有数据所以字节流一样可以处理字符数据。
结论只要是处理纯文本数据就优先考虑使用字符流。 除此之外都使用字节流。输入流和输出流输入流只能进行读操作输出流只能进行写操作程序中需要根据待传输数据的不同特性而使用不同的流。InputStream 是所有的输入字节流的父类它是一个抽象类。ByteArrayInputStream、StringBufferInputStream、FileInputStream 是三种基本的介质流它们分别从Byte 数组、StringBuffer、和本地文件中读取数据。PipedInputStream 是从与其它线程共用的管道中读取数据与Piped 相关的知识后续单独介绍。ObjectInputStream 和所有FilterInputStream 的子类都是装饰流装饰器模式的主角
输出字节流 OutputStreamOutputStream 是所有的输出字节流的父类它是一个抽象类。ByteArrayOutputStream、FileOutputStream 是两种基本的介质流它们分别向Byte 数组、和本地文件中写入数据。PipedOutputStream 是向与其它线程共用的管道中写入数据。ObjectOutputStream 和所有FilterOutputStream 的子类都是装饰流。
总结
输入流InputStream或者Reader从文件中读到程序中输出流OutputStream或者Writer从程序中输出到文件中节点流
节点流直接与数据源相连读入或读出。直接使用节点流读写不方便为了更快的读写文件才有了处理流。处理流
处理流和节点流一块使用在节点流的基础上再套接一层套接在节点流上的就是处理流。如BufferedReader.处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装称为流的链接。转换流
InputStreamReader 、OutputStreamWriter 要InputStream或OutputStream作为参数实现从字节流到字符流的转换。
构造函数
InputStreamReader(InputStream); //通过构造函数初始化使用的是本系统默认的编码表GBK。
InputStreamWriter(InputStream,String charSet); //通过该构造函数初始化可以指定编码表。
OutputStreamWriter(OutputStream); //通过该构造函数初始化使用的是本系统默认的编码表GBK。
OutputStreamwriter(OutputStream,String charSet); //通过该构造函数初始化可以指定编码表。实战演练
FileInputStream类的使用读取文件内容
package com.app;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;public class A1 {public static void main(String[] args) {A1 a1 new A1();//电脑d盘中的abc.txt 文档String filePath D:/abc.txt ;String reslut a1.readFile( filePath ) ;System.out.println( reslut ); }/*** 读取指定文件的内容* param filePath 文件的路径* return 返回的结果*/public String readFile( String filePath ){FileInputStream fisnull;String result ;try { // 根据path路径实例化一个输入流的对象fis new FileInputStream( filePath );//2. 返回这个输入流中可以被读的剩下的bytes字节的估计值 int size fis.available() ;//3. 根据输入流中的字节数创建byte数组 byte[] array new byte[size];//4.把数据读取到数组中fis.read( array ) ; //5.根据获取到的Byte数组新建一个字符串然后输出 result new String(array); } catch (FileNotFoundException e) {e.printStackTrace();}catch (IOException e) {e.printStackTrace();}finally{if ( fis ! null) {try {fis.close();} catch (IOException e) {e.printStackTrace();}}}return result ;}
}
FileOutputStream 类的使用将内容写入文件
package com.app;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class A2 {public static void main(String[] args) {A2 a2 new A2();//电脑d盘中的abc.txt 文档String filePath D:/abc.txt ;//要写入的内容String content 今天是2017/1/9,天气很好 ;a2.writeFile( filePath , content ) ;}/*** 根据文件路径创建输出流* param filePath 文件的路径* param content : 需要写入的内容*/public void writeFile( String filePath , String content ){FileOutputStream fos null ;try {//1、根据文件路径创建输出流 fos new FileOutputStream( filePath );//2、把string转换为byte数组byte[] array content.getBytes() ;//3、把byte数组输出fos.write( array );} catch (FileNotFoundException e) {e.printStackTrace();}catch (IOException e) {e.printStackTrace();}finally{if ( fos ! null) {try {fos.close();} catch (IOException e) {e.printStackTrace();}}}}
}
注意
在实际的项目中所有的IO操作都应该放到子线程中操作避免堵住主线程。FileInputStream在读取文件内容的时候我们传入文件的路径D:/abc.txt, 如果这个路径下的文件不存在那么在执行readFile()方法时会报FileNotFoundException异常。FileOutputStream在写入文件的时候我们传入文件的路径D:/abc.txt, 如果这个路径下的文件不存在那么在执行writeFile()方法时, 会默认给我们创建一个新的文件。还有重要的一点不会报异常。综合练习实现复制文件从D盘复制到E盘
package com.app;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;public class A3 {public static void main(String[] args) {A3 a2 new A3();//电脑d盘中的cat.png 图片的路径String filePath1 D:/cat.png ;//电脑e盘中的cat.png 图片的路径String filePath2 E:/cat.png ;//复制文件a2.copyFile( filePath1 , filePath2 );}/*** 文件复制 * param filePath_old : 需要复制文件的路径* param filePath_new : 复制文件存放的路径*/public void copyFile( String filePath_old , String filePath_new){FileInputStream fisnull ;FileOutputStream fout null ;try {// 根据path路径实例化一个输入流的对象 fis new FileInputStream( filePath_old );//2. 返回这个输入流中可以被读的剩下的bytes字节的估计值 int size fis.available() ;//3. 根据输入流中的字节数创建byte数组 byte[] array new byte[size];//4.把数据读取到数组中 fis.read( array ) ; //5、根据文件路径创建输出流 fout new FileOutputStream( filePath_new ) ;//5、把byte数组输出 fout.write( array );} catch (FileNotFoundException e) {e.printStackTrace();}catch (IOException e) {e.printStackTrace();}finally{if ( fis ! null) {try {fis.close();} catch (IOException e) {e.printStackTrace();}}if ( fout ! null ) {try {fout.close();} catch (IOException e) {e.printStackTrace();} }}}
}
转载自博文
http://blog.csdn.net/zhaoyanjun6/article/details/54292148