IO
一、File
1.构造函数
File类没有无参构造函数,最常用的构造函数是File(String pathName),(注意分隔符可以使用"/"和"",但是使用""必须写"\",因为涉及转义的问题)
2.File类方法
(1)exists() 用于判断当前的文件路径所对应的文件/文件夹是否存在
(2)isDirectory() 用于当前文件路径对应的是否是文件夹
(3)listFiles() 获取该层路径下所有的文件/文件夹
(4)getName() 获取文件/文件夹名称
(5)getPath() 获取文件/文件夹路径
(6)getAbsolutePath() 获取文件/文件夹绝对路径
(7)getParent() 获取文件父目录路径
(8)canWrite() 判断文件是否可写
(9)canRead() 判断文件是否可读
(10)canExcute() 判断文件是否可执行
(11)isFile() 判断文件/文件夹是否是标准文件
(12)isAbsolute() 判断文件的路径是否是绝对路径
(13)lastModified() 文件的最后修改时间
(14)length() 获取文件的字节数,如果是一个文件夹则这个值为0
(15) toURI() 获取文件路径URI后的路径名
(16) delete() 删除指定的文件/文件夹
(17)deleteOnExit() 当虚拟机终止的时候,删除指定的文件/文件夹
二、字节流
1.使用的流程
(1)使用File类找到一个对象
(2)通过File类的对象去实例化字节流或者字符流的子类
(3)进行字节(字符)的读取
(4)关闭文件流
2.字节输出流
OutputStream是定义了Java流式字节输入模式的抽象类。该类的所有方法返回一个void值并且在出错的情况下引发一个IOException,OutputStream提供的抽象方法有:
(1)close() 关闭输出流,关闭后的写操作都会引起IOException
(2)flush() 刷新输出流,强制输出所有缓冲的输出字节
(3)write(byte[] b) 向输出流写一个完整的字节数组
(4)write(int) 向输出流写入单个字节,注意是int类型
(5)write(byte[] b, int off, int len) 以b[off]为起点,向文件写入字节数组b中len个字节
2.1 FileOutputStream
FileOutpuStream应该是Java中最常见的字节输出流了,它创建一个可向文件写入字节的类OutputStream
构造函数:(1)FileOutputStream(String name) (2)FileOutputStream(File file) (3)FileOutputStream(File file, boolean append)
前两个构造方法类似,前者输入文件的绝对路径,后者输入File的实例对象,和RandomAccessFile一样,推荐后者。第三个构造方法有一点不同,append如果设置为true,文件则以搜索路径模式打开。FileOutputStream的创建不依赖于文件是否存在,在创建对象时,FileOutputSStream会在打开输出文件之前就创建它。这种情况下如果试图打开一个只读文件,会引发IOException。
3.字节输入流
InputStream是定义了Java流式字节输入模式的抽象类。该类所有方法在出错的时候都会引发一个IOException,InputStream提供的抽象方法有:
(1)int available() 返回当前可读的字节数
(2)void close() 关闭此输入流并释放与该流关联的所有系统资源,关闭之后再读取会产生IOException
(3)int mark(int readlimit) 在输入流中放置一个标记,该流在读取N个Bytes字节前都保持有效
(4)boolean markSupported() 如果调用的流支持mark()/reset()就返回true
(5)int read() 如果下一个字节可读取则返回一个整形,遇到文件尾时返回-1
(6)int read(byte b[]) 试图读取b.length个字节到b中,并返回实际成功读取的字节数,遇到文件尾则返回-1
(7)int read(byte b[], int off, int len) 将输入流中最多len个数组直接读入byte数组,off表示数组b中写入数据的初始偏移量。注意,三个read方法,在输入数据可用、检测到流末尾或者抛出异常前,此方法将一直阻塞
(8)void reset() 重新设置输入指针到先前设置的标记处
(9)long skip(long n) 跳过和丢弃此输入流中数据的n个字节
3.1FileInputStream
FileInputStream应该是Java中最常见的字节输入流了,它创建一个能从文件读取字节的InputStream类,它的两个常用构造方法如下:
(1) FileInputStream(String name) (2) FileInputStream(File file)
和FileOutputStream差不多,推荐后者的用法。
要区分清楚,OutputStream的作用是将内容由Java内存输出到文件中、InputStream是将内容由文件输入到Java内存中。read(byte b[])方法之前讲明了,表示"试图读取buffer.length个字节到buffer中,并返回实际读取的字节数",返回的是实际字节的大小。不要误以为"Hello World!!!"是14个字符即28个字节,字节流底层是以byte为单位的,因此文件里面只有14个字节罢了,至于返回的是20,还是因为"字节对齐"的问题。