Java常用IO流
字节流
FileInputStream 字节输入流
常用方法:
int read(byte[] b,int off ,int len) 返回读取的长度,读取失败返回-1。最多读取len个字节,读来的数据存放在b中,从第b[off]个开始存放。
FileOutputStream 字节输出流
常用方法:
void write(byte[] b,int off ,int len); 写入len个字节到文件中去, 数据来自b,从第b[off]个开始取。 flush(); 刷新此输出流并强制任何缓冲的输出字节被写出。
BufferedInputStream 缓冲字节输入流,为装饰流,需要依赖节点流存在。(默认缓冲大小为8k)
BufferedOutputStream 缓冲字节输出流。
拷贝文件:
/** * 拷贝文件,缓冲字节流实现 * @param srcPath 数据源文件地址 * @param destPath 目的地文件地址,包含文件名。 */ static void copyFile(String srcPath,String destPath){ //jdk7以后支持自动释放io资源 try(BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File(srcPath))); //不为追加模式 BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(destPath),false));){ byte[] flush = new byte[1024];//缓存字节数组,作为中间储存器 int leng = -1;//读到的长度 //把数据从输入流中读到字节数组中,并且判断是否结束 while((leng=bis.read(flush))!=-1){ bos.write(flush,0,leng);//把字节数组里的数据写到文件中去 } bos.flush();//刷新缓冲区域 } catch (Exception e) { e.printStackTrace(); } }
字符流
FileRead 字符输入流,读取内容为字符的文件。
常用方法: readLine() 返回读取到的一行数据,读到结尾返回null。
FileWriter 字符输出流,写出字符到文件中。
常用方法:void write(String s) 直接写入一串字符串。
void newLine() 写入换行符。 Writer appnd(String s); 追加写入,返回对象本身,所以可以一直追加appnd(String s).appnd(String s).appnd(String s); flush(); 刷新此输出流并强制任何缓冲的输出字节被写出。
BufferedReader 缓冲字符输入流,装饰类,需要依赖字符输入流存在。
BufferedWriter 缓冲字符输出流。
字节转为字符流
InputStreamReader 字节输入流转为字符输入流。
OutputStreamWriter 字节输出流转为字符输出流。
/** * 拷贝内容为字符的文件,缓冲字符流实现。 * @param srcPath 数据源文件地址 * @param destPath 目的地文件地址,包含文件名。 */ static void copyFile(String srcPath,String destPath){ //jdk7以后支持自动释放io资源 try(BufferedReader br = new BufferedReader( new InputStreamReader(//字节输入流转为字符输入流 new FileInputStream(new File(srcPath)))); //不为追加模式 BufferedWriter bw = new BufferedWriter( new OutputStreamWriter(//字节输出流转为字符输出流 new FileOutputStream(new File(destPath),false)));) { //中间储存变量 String temp; //把数据从输入流中读到字符串,并且判断是否结束 while (null!=(temp=br.readLine())){ bw.write(temp);//把字符串写到文件中去 bw.newLine(); } bw.flush();//刷新缓冲区域 } catch (Exception e) { e.printStackTrace(); } }
对象流
ObjectOutputStream 对象的序列化流,把对象转成字节数据的输出到文件中保存,对象的输出过程称为序列化,可实现对象的持久存储。
writeObject(Object o); 写入对象到文件中
ObjectInputStream 对象的反序列化流,读取对象。
Object readObject(); 从文件中读取对象
类要序列号需要实现Serializable接口。
数据流
DataOutputStream 数据输出流,把field写到文件中去。
writeUTF(String str)
使用机器无关的方式使用modified UTF-8编码将字符串写入底层输出流。
DataInputStream 数据输入流,把field从文件中读取出来。
String readUTF()
读取以modified UTF-8格式编码的Unicode字符串的表示; 这个字符串然后作为String返回。
先写入的先读出来。
字节数组流
它们的源头和目的地为字节数组!不用关闭流。
ByteArrayInputStream(byte[] datas); //数据来源为字节数组
ByteArrayOutputStream(); //不需要指定目的地,目的地为内存中 可以通过toByteArray(),toString(),获取流中内容
关闭IO流
1.先打开的后关闭:
例如:先开输入流,后开输出流;先关输出流,后关输出流。
2.外层流先关闭:(注意:关闭外层流会自动调用内层流的关闭)
例如:字节缓存流依赖于字节流,关闭时,先关闭字节缓存流,后关闭字节流。不然报错。
推荐使用:commons-io组件