一、io:上传下载,写入写出
	流: 一连串流动的数据,以先入先出的方式进行流动,管道,以程序为中心、程序与网络|文件|服务器|数组..(相关课程推荐:java视频教程)
分类
1)按照流向:
		输入流;输出流
2)操作单元分:
		字节流 (万能流):任何内容都可以转为字节,可以传输文本,图片,音频;字符流 :只能操作纯文本数据
3)按照功能:
		节点流 : 包裹源头,实现基本功能;功能流 : 对节点流增强性能,提高效率
4)各个分类之间是相辅相成的
字节流
	(1)字节输入流 : inputstream 	此抽象类是表示字节输入流的所有类的超类;fileinputstream		从文件系统中的某个文件中获得输入字节
//字节流输入 inputstream //导包	导包快捷键: ctrl+shift+oimport java.io.file;import java.io.fileinputstream;import java.io.filenotfoundexception;import java.io.ioexception;import java.io.inputstream;public class demo01 {	public static void main(string[] args) throws ioexception {		//fileinputstream(string name) 		通过打开一个到实际文件的连接来创建一个 fileinputstream,该文件通过文件系统中的路径名 name 指定		//fileinputstream(file file) 		通过打开一个到实际文件的连接来创建一个 fileinputstream,		该文件通过文件系统中的 file 对象 file 指定		inputstream is=new fileinputstream(new file("d:/test.txt"));//创建d盘符的根目录下的文件		system.out.println(is);		//方式1: int read() 读入数据 一个字节一个字节读入		/*int num=is.read();		system.out.println((char)num);		num=is.read();		system.out.println((char)num);		system.out.println((char)(is.read()));*/		//方式2:使用循环,循环读入,可以简化代码,重复代码只写一次,但还是一个字节一个字节的读入		/*int num=-1;		while((num=is.read())!=-1){			system.out.println((char)num);		}*/		//方式3:int read(byte[] b) 一个字节数组一个字节数组的读入		//返回值: 返回读入到字节数组中数据的个数,没有读到返回-1		byte[] car=new byte[1];		//int len=is.read(car); 		int len=-1;		while((len=is.read(car))!=-1){			system.out.println(new string(car,0,len));		}		//关闭		is.close();	}}
(2)字节输出流: outputstream   	此抽象类是表示输出字节流的所有类的超类;fileoutputstream  		文件输出流是用于将数据写入 file 的输出流
//字节输出流 outputstream//导包	导包快捷键: ctrl+shift+oimport java.io.filenotfoundexception;import java.io.fileoutputstream;import java.io.ioexception;import java.io.outputstream;public class demo02 {	public static void main(string[] args) {		//fileoutputstream(string name)创建一个向具有指定名称的文件中写入数据的输出文件流		//fileoutputstream(string name,boolean append)  		创建一个向具有指定 name 的文件中写入数据的输出文件流		//fileoutputstream(file file,boolean append) 		创建一个向指定 file 对象表示的文件中写入数据的文件输出流		//boolean append	返回值:true追加,false不追加(默认false)		outputstream os=null;		//try...catch(){}	捕捉异常,处理异常		try {			//1.选择流			os=new fileoutputstream("d:/hhh.txt",hhtrue); 			//文件不存在,系统会自动帮我们创建,但文件夹不会			//2.准备数据			string str="要好好学习,天天向上..."; 			byte[] c和=str.getbytes();			//3.写出 void write(byte[] b)  			os.write(ch);			//4.刷出			os.flush();		} catch (filenotfoundexception e) {			e.printstacktrace();		} catch (ioexception e) {			e.printstacktrace();		} finally{			//5.关闭			try {//预防空指针异常				if(os!=null){					os.close();				}			} catch (ioexception e) {				e.printstacktrace();			}		}	}}
字符流
只能操作纯文本
1)节点流:
	(1)字符输入流:reader 	读取字符流的抽象类;filereader 		用来读取字符文件的便捷类
//字符输入流 reader//导包	导包快捷键: ctrl+shift+oimport java.io.filenotfoundexception;import java.io.filereader;import java.io.ioexception;import java.io.reader;public class demo03 {	public static void main(string[] args) {		//filereader(string filename) 		reader rd=null;		try {			//1.选择流			rd=new filereader("d:/hehe.txt");//创建d盘符的根目录下的文件			//2.读入			//方法1:int read() 读取单个字符。 			/*system.out.println((char)rd.read());			system.out.println((char)rd.read());			system.out.println((char)rd.read());			system.out.println((char)rd.read());*/			int len=-1;  //存储读到的数据  如果为-1,证明已达到末尾			//方法2:			/*while(-1!=(len=rd.read())){				system.out.println((char)len);			}*/			//方法3:int read(char[] cbuf)  将字符读入数组。			char[] car=new char[1024];			while((len=rd.read(car))!=-1){				system.out.println(new string(car,0,len));			}		} catch (filenotfoundexception e) {			e.printstacktrace();		} catch (ioexception e) {			e.printstacktrace();		} finally{			if(rd!=null){				try {					//关闭功能					rd.close();				} catch (ioexception e) {					e.printstacktrace();				}			}		}	}}
(2)字符输出流: writer 	写入字符流的抽象类;filewriter		用来写入字符文件的便捷类
//字符输出流:writer//导包	导包快捷键: ctrl+shift+oimport java.io.filenotfoundexception;import java.io.filereader;import java.io.filewriter;import java.io.ioexception;import java.io.reader;import java.io.writer;public class chardemo02 {	public static void main(string[] args) {		//filewriter(file file) 		//默认不追加		//filewriter(file file, boolean append)  			//filewriter(string file)  		//filewriter(string file, boolean append)  		writer rt=null;		try {			//1.选择流			rt=new filewriter("d:/houhou.txt",true);			//2.写出			/*	void write(char[] cbuf)  写入字符数组 				void write(char[] cbuf, int off, int len) 写入字符数组的某一部分				void write(int c) 写入单个字符				void write(string str)  写入字符串 				void write(string str, int off, int len) 写入字符串的某一部分 			*/			rt.write(97);			rt.write("\r\n");  		//换行			rt.write("你真好看!!!!");			rt.write("\r\n");			rt.write("你真好看!!!!",2,2);			rt.write("\r\n");			char[] ch={'a','b','c','d','e'};			rt.write(ch);			rt.write("\r\n");			rt.write(ch,2,3);			//3.刷出			rt.flush();				} catch (ioexception e) {			e.printstacktrace();		} finally{			//4.关闭			if(null!=rt){				try {					rt.close();				} catch (ioexception e) {					e.printstacktrace();				}			}		}	}}
功能流
缓冲流: 增强功能,提高性能,加快读写效率
1)字节流:
	bufferedinputstream 	字节输入流缓冲流
	bufferedoutputstream 	字节输出流缓冲流
		没有新增方法,可以发生多态使用
//导包import java.io.bufferedinputstream;import java.io.bufferedoutputstream;import java.io.fileinputstream;import java.io.filenotfoundexception;import java.io.fileoutputstream;import java.io.ioexception;import java.io.inputstream;import java.io.outputstream;public class bufferedinputstream01 {	public static void main(string[] args) throws ioexception {		//1.选择流		//bufferedinputstream(inputstream in) 		inputstream is=new bufferedinputstream(new fileinputstream("d:/hehe.txt"));		outputstream os=new bufferedoutputstream(new fileoutputstream("e:/hengheng.txt") );		//2.读写		byte[] car=new byte[1024];		int len=-1;		while((len=is.read(car))!=-1){			os.write(car,0,len);		}		//3.刷出		os.flush();		//4.关闭		os.close();		is.close();	}}
2)字符流:	
	bufferedreader	字符输入流缓冲流			
			新增方法:	string readline()	读取一个文本行
	bufferedwriter	字符输出流缓冲流
			新增方法:	void newline()		写入一个行分隔符 
//导包import java.io.bufferedreader;import java.io.bufferedwriter;import java.io.filereader;import java.io.filewriter;import java.io.ioexception;public class bufferedreader02 {	public static void main(string[] args) throws ioexception {		//1.选择流  导包快捷键: ctrl+shift+o		bufferedreader br=new bufferedreader(new filereader("d:/hehe.txt"));		bufferedwriter bw=new bufferedwriter(new filewriter("d:/ccc.txt"));		//2.读写		string msg=null;		while((msg=br.readline())!=null){			bw.write(msg);			bw.newline();		}		//3.刷出		bw.flush();		//4.关闭		bw.close();		br.close();	}}
data流(字节节点流)
data流(字节节点流):
	读写基本数据类型+string类型数据,是字节流功能流的一种
		datainputstream		新增方法: readxxx()
		dataoutputstream 	新增方法: writexxx()
	存在新增方法不能发生多态,先写出再写入
可能碰到的异常:eofexception 文件有,内容读入不到,必须读入的是写出的源文件
//导包import java.io.bufferedinputstream;import java.io.bufferedoutputstream;import java.io.datainputstream;import java.io.dataoutputstream;import java.io.fileinputstream;import java.io.filenotfoundexception;import java.io.fileoutputstream;import java.io.ioexception;public class data01 {	public static void main(string[] args) throws ioexception {		//调用方法		write("d:/data.txt");		read("d:/data1.txt");	}	//读入	public static void read(string path) throws ioexception{		//1.输入流 数据类型+数据		datainputstream in=new datainputstream(new  bufferedinputstream(new fileinputstream(path)));		//2.读入		int i=in.readint();		boolean b=in.readboolean();		string s=in.readutf();		system.out.println(i+"-->"+b+"-->"+s);		//3.关闭		in.close();	}	//写出	public static void write(string path) throws ioexception{		//1.输出流		dataoutputstream out=new dataoutputstream(new bufferedoutputstream(new fileoutputstream(path)));		//2.准备数据		int i=101;		boolean f=false;		string s="哈哈";		//3.写出  写出和读入的顺序要保持一致		out.writeint(i);		out.writeboolean(f);		out.writeutf(s);		//4.刷出		out.flush();		//5.关闭		out.close();	}}
对象流
object 保存数据类型+数据
	字节的功能流:当想要传输|读写对象类型数据的时候,可以使用一个对象流
	序列化: 把对象类型的数据转化为可存储|可传输的状态的过程
		objectinputstream()    反序列化输入流   新增方法: readobject()
		objectoutputstream()   序列化输出流       新增方法: writeobject()
注意:
	1)先序列化后反序列化
	2)序列化反序列读写顺序一致
	3)不是所有的类都能序列化 		java.io.serializable 空接口
	4)不是所有的属性都需要序列化 		transient
	5)static内容不会被序列化
	6)如果父类实现serializable接口,子类中可以序列化所有内容
如果子类实现serializable接口,但是父类没有实现,子类只能序列化子类独有的内容
//导包import java.io.bufferedinputstream;import java.io.bufferedoutputstream;import java.io.fileinputstream;import java.io.fileoutputstream;import java.io.ioexception;import java.io.objectinputstream;import java.io.objectoutputstream;import java.io.serializable;import java.util.arrays;public class objectdemo02 {	public static void main(string[] args) throws ioexception, classnotfoundexception {		write("d:/object.txt");		read("d:/object.txt");	}	//反序列化输入	public static void read(string path) throws ioexception, classnotfoundexception{		//1.输入流		objectinputstream is=new objectinputstream(new bufferedinputstream(new fileinputstream(path)));		//2.读入		object p= is.readobject();		int[] arr= (int[]) is.readobject();		if(p instanceof person){			person person=(person)p;			system.out.println(person.getname());		}		system.out.println(p);		system.out.println(arrays.tostring(arr));		//3,关闭		is.close();	}	//序列化输出	public static void write(string path) throws ioexception{		//1.输出对象信息		objectoutputstream os=new objectoutputstream(new bufferedoutputstream(new 		fileoutputstream(path)));		//2.准备数据		person p=new person("aaa",18);		int[] arr={1,2,3,4};		//3.输出		os.writeobject(p);		os.writeobject(arr);		//4.刷出		os.flush();		//5.关闭		os.close();	}}//接口class person implements serializable{	private  string name;	private static int age;	public person() {	}	public person(string name, int age) {		super();		this.name = name;		this.age = age;	}	public string getname() {		return name;	}	public void setname(string name) {		this.name = name;	}	public int getage() {		return age;	}	public void setage(int age) {		this.age = age;	}	@override	public string tostring() {		return "person [name=" + name + ", age=" + age + "]";	}}
二、file 类
file 类:文件和目录路径名的抽象表示形式
	提供的功能:操作文件外部的能力,不能操作文件内部的内容
	能够定义真实存在的路径|文件,不在的也可以定义,所以抽象表现形式
	构造器:	file(file parent, string child)   根据 parent 抽象路径名和 child 路径名字符串创建一个新 file 实例 
	  		file(string pathname)  通过将给定路径名字符串转换为抽象路径名来创建一个新 file 实例 
	 		file(string parent, string child)   根据 parent 路径名字符串和 child 路径名字符串创建一个新 file 实例 
本文来自java入门教程栏目,欢迎学习!
以上就是java中的io流如何分类的详细内容。
   
 
   