IO流相关学习总结1
分类
抽象父类:字节输入流(InputStream),字节输出流(OutputStream),字符输入流(Reader),字符输出流(Writer)
访问文件:字节输入流(FileInputStream),字节输出流(FileOutputStream),字符输入流(FileReader),字符输出流(FileWriter)
访问数组:字节输入流(ByteArrayInputStream),字节输出流(ByteArrayOutputStream),字符输入流(CharArrayReader),字符输出流(CharArrayWriter)
访问管道:字节输入流(PipedInputStream),字节输出流(PipedOutputStream),字符输入流(PipedReader),字符输出流(PipedWriter)
缓冲流:字节输入流(BufferedInputStream),字节输出流(BufferedOutputStream),字符输入流(BufferedReader),字符输出流(BufferedWriter)
装饰流:字节输入流(FilterInputStream),字节输出流(FilterOutputStream),字符输入流(FilterReader),字符输出流(FilterWriter)
访问字符串:字符输入流(StringReader),字符输出流(StringWriter)
转换流:字符输入流(InputStreamReader),字符输出流(OutputStreamWriter)
对象流:字节输入流(ObjectInputStream),字节输出流(ObjectOutputStream)
打印流:字节输出流(PrintStream),字符输出流(PrintWriter)
数据过滤流:字节输入流(DataInputStream),字节输出流(DataOutputStream)
基本操作
确定源–>打开流–>操作流–>关闭流
具体理解
InputStream和Reader是所有输入流的基类,OutputStream和Writer是所有输出流的基类,如上述所说的,InputStream和OutputStream是字节流的父类,而Reader和Writer是字符流的父类。
InputSream类
在InputStream类中定义了下列几种常用的方法:
- int reader()从数据流中读取数据的一个字节,返回0到255范围内的int字节值,若到了文件流末尾而没有可用的字节,那么返回-1;
- int reader(byte []b),从输入流中将最多b.length个字节的数据读入一个byte的数组中,以整数形式返回实际读取的字节数。若到了流末尾而没有可用字节,那么返回-1
- int reader(byte[] b,int off,int len),将输入流中最多len个数据字节读入byte数组,尝试读取len个字节,但读取的字节可能小于该值。以整数形式返回实际读取的字节数,若因为到达文件末尾而没有可用字节,那么返回-1
public void close() throws IOException
,关闭此输入流并释放与该流相关的所有系统资源
OutputStream类
同上
- void write(int b),将指定的字节写入此输出流。要写入的字节是参数b的8个低位,b的24个高位将被忽略(指的是int是4个字节,相当于是32位,b的8个低位是指b右边的8位,24位指b左边的24位,在传输数据时会只取后面八位,会造成精度损失),及写入范围是0到255;
- void writer(byte []b),将b.length个字节从指定的byte数组写入输出流;
- void writer(byte []b,int off,int len),将指定的byte数组从偏移量off(把存储单元的实际地址与其所在段的段地址之间的距离称为段内偏移,也称为“有效地址或偏移量)开始的len个字节写入此输出流
public void flush() throws IOException
,刷新此输出流并强制写出所有缓冲的输出字节,调用此方法指示将这些字节立即写入它们的预期目标public void close() throws IOException
,关闭输出流并释放与该流关联的所有系统资源
Reader类
- int reade(),从输入流中读取单个字符,若已达到末尾,则返回-1
- int read(char []b),从输入流中读取最多读取b.length个字符的数据,将其存储在数组b中,返回实际读取的字符数,若到达流的末尾,则返回-1
- int read(char []b,int off,int len),从输入流中最多读取len个字符的数据,将其存储在字符数组b中,从数组的off的位置开始存储,若到达流的末尾,返回-1
public void close() throws IOException
,关闭此输出流并释放与该流相关的所有系统资源
Writer类
- void write(int c),将单个指定的字符输出到指定的输出流
- void write(char []b),将字符数组b中的数据输出到指定输出流
- void write(char []b,int off),将字符数组b从off位置开始的len个字符输出到指定流
- void write(String str),将str字符串中的字符输出到指定输出流
- void write(String str,int off,int len),将str字符串中从off位置开始的len个字符输出到指定的输出流
- void flush(),刷新该流的缓冲
public void close() throws IOException
,关闭此输出流并释放与该流有关的所有系统资源
对txt文件进行复制(字节流)
将d盘中名为"hello.txt"的文件内容复制到"hello1.txt"文件中
package com;
import java.io.*;
public class IOCopy {
public static void main(String []args){
File oldFile = new File("D:\\IDEA\\IOCopy\\src\\com\\hello");//创建File对象,这是读入的文件
File newFile = new File("D:\\IDEA\\IOCopy\\src\\com\\hello1");//创见File对象,这是写出的文件
FileInputStream fis = null;//赋初值
FileOutputStream fos = null;//赋初值
try{
fis = new FileInputStream(oldFile);//创建输入流对象
fos = new FileOutputStream(newFile);//创建输出流对象
byte[] bytes = new byte[100];
while(true){
int len = fis.read(bytes,0,bytes.length);
if(len == -1){
break;
}else{
fos.write(bytes,0,len);
}
}
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
try{
fis.close();//关闭输入流
fos.close();//关闭输出流
}catch(IOException e){
e.printStackTrace();
}
}
}
- 结果如下图:
hello — Postimages (postimg.cc)