Java的IO
IO流是用来处理设备之间的传输,Java对数据的操作是通过流的方式,java用于操作流的对象都在IO包中。
流按操作数据分为两种:字节流和字符流。
按流方向分为:输入流和输出流。
字节流的抽象基类:InputStream,OutputStream。
字符流的抽象基类:Reader,Writer。
这四个类派生出的子类名称都是以其父类名作为子类名的后缀。
字符流
FileReader
FileWriter
BufferedReader
BufferedWriter
字节流
FileInputStream
FileOutputStream
BufferedInputStream
BufferedOutputStream
转换流
InputStreamReader
OutputStreamWriter
流操作的基本规律,通过三个明确来完成
1,明确源和目的。
源:输入流。InputStream Reader
目的:输出流。OutputStream Writer。
2,操作的数据是否是纯文本。
是:字符流。
不是:字节流。
3,当体系明确后,在明确要使用哪个具体的对象。
通过设备来进行区分:
源设备:内存,硬盘。键盘
目的设备:内存,硬盘,控制台。
Properties是hashtable的子类
也就是说它具备map集合的特点,而且它里面存储的键值对都是字符串,是集合中和IO技术相结合的集合容器。
该对象的特点:可以用于键值对形式的配置文件。
那么在加载数据时,需要数据有固定格式:键=值。
遍历Properties元素的方法:
Set
File类常见方法
创建:
boolean createNewFile():在指定位置创建文件,如果该文件已经存在,则不创建,返回false,和输出流不一样,输出流对象一建立创建文件。而且文件已经存在,会覆盖。
boolean mkdir():创建文件夹,boolean mkdirs():创建多级文件夹。
[if !supportLists]2, [endif]删除:
boolean delete():删除失败返回false,如果文件正在被使用,则删除不了返回false,void deleteOnExit();在程序退出时删除指定文件。
3,判断:
boolean exists() ;isFile():isDirectory();isHidden();isAbsolute();
获取信息:
getName();getPath();getParent();getAbsolutePath() ;long lastModified() ;long length()
DataInputStream与DataOutputStream是可以用于操作基本数据类型的数据的流对象。
用于操作字节数组的流对象:
ByteArrayInputStream :在构造的时候,需要接收数据源,而且数据源是一个字节数组。
ByteArrayOutputStream: 在构造的时候,不用定义数据目的,因为该对象中已经内部封装了可变长度的字节数组,这就是数据目的地。
因为这两个流对象都操作的数组,并没有使用系统资源,所以不用进行close关闭。:
源设备:
键盘System.in,硬盘 FileStream,内存 ArrayStream。
目的设备:
控制台System.out,硬盘FileStream,内存 ArrayStream。
用流的读写思想来操作数据。
键盘的最常见写法:
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
(Scanner sc = new Scanner(System.in);sc.next();)
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));