Input Output
IO流用来处理设备之间的数据传输
Java对数据的操作时通过流的方式
Java用于操作流的对象都在IO包中
流按操作数据分为两种:字节流与字符流
流按流向分为:输入流、输出流
UNICODE每个都是两个字节
UTF-8
IO流常用基类:
字节流的抽象基类:
InputSteam,OutputStream
字符流的抽象基类:
Reader,Writer
注:由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。
数据的最常见体现形式是:文件。
专门用于操作文件的Writer子类对象FileWriter
1.创建一个FileWriter对象,该对象一被初始化就必须要明确被操作的文件;而且该文件会被创建到指定的目录下;如果该目录下已有同名文件将被覆盖;
//明确数据要存放的目的地
FileWriter fw = new FileWriter("demo.txt");抛或者try异常
2.调用writer方法将字符串写入到流(内存)中;
fw.writer("abcde");
3.刷新流对象中的缓冲中的数据;
4.将数据刷到目的地中;
fw.flush();
5.关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据;将数据刷到目的地中和flush区别,flush刷新后流可以继续使用,close刷新后会将流关闭。
IO异常处理方式:
在外边建立引用,在try内进行初始化。
在finally中要进行判空处理。
文件的续写:
传递一个true参数,代表不覆盖已有的文件,并在已有文件的末尾处进行数据的续写。
Linux \n换行 Windows \r\n换行
文本文件读取方式
FileReader
1.创建一个文件读取流对象,和指定名称的文件相关联;要保证该文件是已经存在的,如果不存在,会发生异常FileNotFoundException
FileReader fr = new FileReader("demo.txt");
2.调用读取流对象的read方法;read()一次读一个字符,而且会自动往下读;
int ch = fr.read();
char chr = (char)ch;
while(true){
int ch = fr.read();
if(ch==-1) break;
System.out.println(char(ch));
}
int ch = 0;
while(ch = fr.read()!=-1){
System.out.println(char(ch));
}
2-1.定义一个字符数组,用于存储读到的字符;
该read(char[])返回的是读到字符个数
FileReader fr = new FileReader("demo.txt");
char[] buf = new char[3];
int num = 0;
while(num=fr.read(buf)!=-1){
System.out.println(new String(buf,o,num));
}
文件管理:
流类关心的是文件的内容,而File类关心的是在磁盘上文件的存储。
获取文件名示例:
File对象还有另外两个构造器啊:
File(String path,String name) 它可以在由path参数指定的目录中创建具有给定名字的File对象。(如果path参数为null,这个构造器将使用当前目录创建File对象)。
File(File dir,String name) 其中,File对象表示一个目录,若dir为null,这个构造器就会在当前目录中创建一个File对象。
如果你在构建File对象时,确实在Windows中使用了斜线作为目录分隔符,那么getAbsolutePath方法就会返回包含斜线的文件;使用getCanonicalPath方法就可以将斜线替换成反斜线。
缓冲区数据结构:
每个缓冲区都具有:
●
一个容量
,它永远不能改变;
●一个读写位置,下一个值将在此进行读写;
●一个界限,超过它进行读写是没有意义的;
●一个可选的标记,用于重复一个读入或写出操作。
这些值满足下面的条件——0≤标记≤位置
≤界限≤容量