Java四大IO抽象类
Input Stream/OutputStream(字节的)和Reader/Writer(字符的)类是所有io流类的抽象父类
InputStream
此抽象类是字节输入流的所有类的父类。InputStream是一个抽象类,不可以实例化,数据读取需要由它的子类来实现,根据节点不同,派生了不同的节点流子类。
继承自InputStream的流都是用于向程序中输入数据,且数据的单位为字节(8bit)
常用方法:int read():读取一个字节的数据,并将字节的值作为int类型返回。
未读出字节返回-1(返回值为-1表示读取结束)
void close():关闭输入流对象,释放相关系统资源
OutputStream
此抽象类表示字节输出流的所有类的父类。输出流接受输出字节并将这些字节发送到某个目的地
常用方法:
void write(int n):向目的地中写入一个字节。
void close():关闭输出流对象。
Reader
Reader用于读取的字符流抽象类,数据单位为字符。
int read():读取一个字符的数据,并将字符的值作为int类型返回(0-65535之间的一个值)。返回值为-1表示读取结束。
void close():关闭流对象
write
Writer 用于输出的字符流抽象类,数据单位为字符
void write(int n): 向输出流中写入一个字符
void close():关闭输出流对象,释放资源。
字符流和字节流的区别
字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好!如果是音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点.
所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。在读取文件(特别是文本文件)时,也是一个字节一个字节地读取以形成字节序列.
字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串; 2. 字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。
字节流转换成字符流可以用 InputSteamReader OutputStreamWriter
public class SecondStream {
public static void main(String[] args) {
//创建File Input Stream的对象fis
FileInputStream fis=null;
//由于可能出现异常,要用try catch finally 代码块
try{
fis =new FileInputStream("d:/b.txt");
//创建的StringBuffer对象sb,用来存储文本中字符形式,使用append方法,加入每个(char)强转的字符
StringBuffer sb=new StringBuffer();
//操作io流常用的方法,用循环判断是否读取值为-1来判定是否读取结束,循环读入
int temp =0;
//while循环判断是否返回-1来断定读取完毕与否
while((temp=fis.read())!=-1){
System.out.println(temp );
sb.append((char) temp);
}
//toString 方法
System.out.println(sb.toString());
}catch (Exception e){
e.printStackTrace();
}finally {
try{
if(fis!=null){
fis.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
}
}
File类
File类是java提供的针对磁盘中的文件或者目录转换对象的包装类。一个File对象可以代表一个文件或者目录,File对象可以实现获取文件和目录属性等功能,实现对文件和目录的创建、删除等功能。
File类针对文件操作的方法
createNewFile() //创建新文件。
delete() //直接从磁盘上删除
exites() //查询磁盘中的文件是否存在
getAbsolutePath() //获取绝对路径
getPath() //获取相对路径
getName() //获取文件名 相当于调用了一个toString 方法
isFile() //判断是否是文件
length() //查看文件中的字节数
isHidden() //测试文件是否是隐藏文件
针对目录操作的方法
exists() //查询目录是否存在
isDirectory() //判断当前路径是否为目录
mkdir() //创建目录
getParentFile() //获取当前目录的父级目录
list() //返回一个字符串数组,包含目录中的文件和目录的路径名
listFiles //返回一个File数组,表明用此抽象路径名表示的目录中的文件