1:IO流操作主要是为了对数据进行读写操作
2:输入/输出的流向是相对Java程序而言的
IO流的三种分类:
输入流 输出流
字节流 字符流
节点流 处理流
字节流:
父类为InputStream,OuputStream,此为抽象类,不可实例化对象,需要子类继承, 最常用的是 FileInputStream 和 FileOutputStream. 最常用的的方法 int read(byte[] b,int off ,int len) , void write(byte[] b,int off ,int len)
读取数据示例
//声明输入流引用
FileInputStream fis=null;
try{
//生成代表输入流的对象
fis =new FileInputStream("e:/src/from.text");
//生成一个字节数组
byte [] buffer =new byte[100];
//调用输入流的read方法读取数据
fis.read(buffer, 0, buffer.length);
String s=new String(buffer);
//调用String对象的trim方法,去掉字符串首尾的空格
s=s.trim();
}
catch(Exception e){
System.out.print(e);
}
读取写入的对比
//声明输入流引用
FileInputStream fis=null;
//声明输出流引用
FileOutputStream fos=null;
try{
//生成代表输入流的对象
fis =new FileInputStream("e:/src/from.text");
//生成代表输出流的对象
fos =new FileOutputStream("e:/src/to.text");
//生成一个字节数组
byte [] buffer =new byte[100];
//调用输入流的read方法读取数据
fis.read(buffer, 0, buffer.length);
//read的返回值类型是int,正好通过参数给write
int temp=fis.read(buffer, 0, buffer.length);
//调用输出流的write方法写入数据
fos.write(buffer, 0, temp);
}
catch(Exception e){
System.out.print(e);
}
读取大文件的操作
//声明输入流引用
FileInputStream fis=null;
//声明输出流引用
FileOutputStream fos=null;
try{
//生成代表输入流的对象
fis =new FileInputStream("e:/src/from.text");
//生成代表输出流的对象
fos =new FileOutputStream("e:/src/to.text");
//生成一个字节数组
byte [] buffer =new byte[1024];
while(true){
//read的返回值类型是int,正好通过参数给write
int temp=fis.read(buffer, 0, buffer.length);
//当数据读完的时候read返回的值为-1
if(temp==-1){
break;
}
//调用输出流的write方法写入数据
fos.write(buffer, 0, temp);
}
}
catch(Exception e){
System.out.print(e);
}
finally{ //捕获关闭异常
try{
fis.close();
fos.close();
}
catch(Exception e){
System.out.print(e);
}
}
字符流:
父类为Reader,Writer,此为抽象类,不可实例化对象,需要子类继承, 最常用的是 FileReader 和 FileWriter. 最常用的的方法 int read(char[] b,int off ,int len) , void write(char[] b,int off ,int len)
字符流的读取:
FileReader fr=null;
FileWriter fw=null;
try{
fr =new FileReader("e:/src/from.text");
fw =new FileWriter("e:/src/to.text");
//生成一个字符数组
char [] buffer =new char[100];
int temp=fr.read(buffer, 0, buffer.length);
fw.write(buffer, 0, temp);
}
}
catch(Exception e){
System.out.print(e);
}
finally{
try{
fr.close();
fw.close();
}
catch(Exception e){
System.out.print(e);
}
}
处理流:
处理流用来装饰节点流,给它增加新功能,比如节点流是用来传输水的,处理流可以在传输水的功能上给水加热
FileReader fileReader=null;
//声明处理流对象
BufferedReader bufferedReader=null;
try{
fileReader =new FileReader("e:/src/from.text");
//BufferedReader作为处理流用来装饰FileReader节点流,给它添加新功能
bufferedReader =new BufferedReader(fileReader);
String line = null;
while(true){
//当数据读取结束,readLine返回null
line=bufferedReader.readLine();
if(line==null){
break;
}
System.out.println(line);
}
}
catch(Exception e){
System.out.print(e);
}
finally{
try{
fileReader.close();
bufferedReader.close();
}
catch(Exception e){
System.out.print(e);
}
}
其实IO流的操作很相似,基本掌握一种操作就可以举一反三
感谢mars老师的JavaforAndroid的视频教程