- IO:输入/输出(input/ouput)。
- 流:是一种抽象概念,是对数据传输的总称。也就是说数据在设备间的传输称为流,流的本质是数据传输。
- IO 流就是用来处理设备间数据传输问题的,常见的应用:文件复制,文件上传,文件下载。
javaio整体分为File类,IO流结构,Properties类。
File类是基础,包含了对文件系统的常用方法(静态方法);
I0流按流向分两类:1输入类 2输出类
按数据类型:
1字节流
字节输入流inputStream
-
已知直接子类:
AudioInputStream (读取音频视频输入流), ByteArrayInputStream (读取字节数组), FileInputStream (带有过滤器的输入), FilterInputStream (读取硬盘文件的输入流), InputStream , ObjectInputStream (读取对象输入流), PipedInputStream , SequenceInputStream , StringBufferInputStream(字符串缓冲区输入流)
字节输出流OutputStream
-
已知直接子类:
ByteArrayOutputStream (写字节数组), FileOutputStream (带有过滤器的输出流), FilterOutputStream(将数据写入磁盘文件) , ObjectOutputStream(写对象的输出流) , OutputStream , PipedOutputStream(管道输出流)
输出/出流使用
以Java程序为参照,磁盘的数据传入输入流,java到磁盘输出流
FilterInputStream (读取硬盘文件的输入流)
作用:将java程序的数据写入本地磁盘
构造方法:
new FileOutputStream(String name)创建基于磁盘的字节输出流对象,以字符串参数表示磁盘的路径
new FileOutputStream(String file)创建基于磁盘的字节输出流对象,以filefile参数表示磁盘的路径 Eile(“路径”)
成员方法
FilelnputStream
文件输入流,也是字节流,注要用于将磁盘的数据读取到java程序中
构造方法:new FileinputStream(String name)
new FileinputStream(File name)
成员方法
字节流写数据加异常处理
一般直接在外面包try{}catch{},但是会有一个问题,如果写入数据失败会运行catch的内容,但是close方法没有运行到也就是资源没有被释放。所以在io操作一定要保存内存被释放。
提供了finally块来执行所有清除操作
finally:在异常处理时提供finally块来执行所有清除的操作。比如io流中的资源释放。
特点:被finally块控制的语句一定会执行,除非JVM退出
2字符流
字符输入流reader
InputStreamReader:从字节流到字符流的桥梁(InputStreamReader构造器入参是FileInputStream的实例对象),它读取字节并使用指定的字符集将其解码为字符。它使用的字符集可以通过名称指定,也可以显式给定,或者可以接受平台的默认字符集。
BufferedReader:从字符输入流中读取文本,设置一个缓冲区来提高效率。BufferedReader是对InputStreamReader的封装,前者构造器的入参就是后者的一个实例对象。
FileReader:用于读取字符文件的便利类,new FileReader(File file)等同于new InputStreamReader(new FileInputStream(file, true),"UTF-8"),但FileReader不能指定字符编码和默认字节缓冲区大小。
PipedReader :管道字符输入流。实现多线程间的管道通信。
CharArrayReader:从Char数组中读取数据的介质流。
StringReader :从String中读取数据的介质流。
字符输入流Reader主要方法:
read():读取单个字符。
read(char[] cbuf) :将字符读入数组。
read(char[] cbuf, int off, int len) : 将字符读入数组的某一部分。
read(CharBuffer target) :试图将字符读入指定的字符缓冲区。
flush() :刷新该流的缓冲。
close() :关闭此流,但要先刷新它。
字符输出流writer
Writer
与Reader
结构类似,方向相反,不再赘述。唯一有区别的是,Writer
的子类PrintWriter
。
write(char[] cbuf) :写入字符数组。
write(char[] cbuf, int off, int len) :写入字符数组的某一部分。
write(int c) :写入单个字符。
write(String str) :写入字符串。
write(String str, int off, int len) :写入字符串的某一部分。
flush() :刷新该流的缓冲。
close() :关闭此流,但要先刷新它。
File类:
构造方法:
File(String pathname) //根据形参创建File对象,所表示的文件或文件夹可以存在,也可以不存在
File(String parent, String child)
File(File parent, String child)
静态成员变量
public static String pathSeparator: 系统中多个路径的分隔符 //windows ;
public static String separator: 系统中一个路径中多个名称之间的分隔符号 //windows \
File类的获取方法
public String getAbsolutePath() 返回此File的绝对路径名字符串。
public String getPath() 返回构造方法中的字符串路径
public String getName() 返回此File表示的文件或文件夹的名称。
public long length() 返回由此File表示的文件的长度。
public File getParent() 返回此File的父目录
public File getParentFile() 返回此File的父目录File对象
public long getFreeSpace() 返回该分区上 空闲空间 long 字节
public long getUsableSpace() 返回该分区上 空闲空间 long 字节 ,会检查写等权限,更准确
public long getTotalSpace() 返回该分区上的总空间
File类的判断方法
public boolean exists() :
public boolean isDirectory() :此File表示的是否为目录。
public boolean isFile() :此File表示的是否为文件。
File类的创建删除方法
public boolean createNewFile() 该名称的文件不存在时,才会创建一个新的空文件。
public boolean mkdir() : 创建由此File表示的目录。
public boolean mkdirs() : 创建由此File表示的目录,创建多级文件夹
public boolean delete() : 只能删除掉文件和空文件夹,java中删除动作不走回收站。
返回值都是方法是否成功执行。
File类的遍历方法
public String[] list() 获取当前目录下的所有的目录和文件的字符串数组
public File[] listFiles() 获取当前目录下的所有的目录和文件的File对象数组
Properties类
Properties
继承于Hashtable
,表示一个持久的属性集,属性列表中每个键及其对应值都是一个字符串。Properties
类被许多Java
类使用,例如在获取环境变量时,它就作为System.getProperties
方法的返回值。
已知直接子类:
方法