java.io.File类型
一、概念
可以用来创建,删除文件/目录,还可以查看文件/目录的属性信息。
但是不可以修改文件里的数据。如果需要修改,应该使用输入/输出流。
二、常用构造器
File(String pathname)
创建一个指定路径的File对象
File(File parent,String child)
在指定parent路径下,创建一个child的file对象
File(String parent,String child)
在指定parent路径下,创建一个child的file对象
三、
绝对路径:是从根目录开始写的路径
window: 从盘符开始书写:
D:\a\f1.txt
D:\a\b
linux: /home/scott/f1.txt
/home/scott
相对路径: 相对某一文件/目录的路径,不是从根路径书写。
reg: f2.txt相对于a目录的路径:
window: b\f2.txt
linux: b/f2.txt
四、常用方法
boolean exists();判断指定的路径是否存在
boolean isFile();判断指定路径是不是文件
boolean isDirectory();判断指定路径是不是目录
String getName());获取文件/目录名称
long lastModified();获取文件/目录的最后修改时间
boolean isAbsolute();判断指定路径是不是绝对路径
String getAbsolutePath();获取绝对路径
String getParent();获取父目录的路径
long length();获取文件大小
文件/目录创建方法:
boolean createNewFile();创建文件
boolean mkdir();创建目录
boolean mkdirs();创建多级目录
文件/目录的删除方法
boolean delete()
可以删除文件,删除目录时,需要目录下没有文件或子目录
File[] listFiles()
获取目录里的file对象
递归:
递归思想:分成递与归。一层层递进,最后再一层层归。
两种递归:
(1) 方法调用自己
(2) 方法A调用方法B,方法B调用A
IO流:(Input,Output)
我们在做项目时,除了自定义的一些数据外,还可能需要从”外界”
引入数据,或者将数据导出到”外界”。这时,我们需要I/O操作。
外界:指的可能是 键盘,显示器,硬盘,另外一个程序。
输入:又叫读入操作
数据时从”外界”流向程序
输出:又叫写出操作
数据时从程序流向”外界”
流: 就是数据序列, 一经创建成功,就会打开一个通道。所以使用完
应该进行关闭操作。
IO流的分类:
(1)按照流向分类:
输入流
输出流
(2)按照处理的数据单位分类:
字节流
字符流
(3)按照功能分类:
节点流:直接连接两个设备的流类型
处理流:对节点流再次封装与处理的流类型
字节流:
抽象父类 InputStream/OutputStream
文件字节流:
FileInputStream/FileOutputStream
(1)构造器:
FileInputStream(File file)
创建一个指定路径的File对象的文件输入流对象
FileInputStream(String name)
创建一个指定路径的字符串的文件输入流对象
常用方法:
int read()
读取该流中的一个字节数据,即8位二进制,存储到一个int数
据的低八位上
如果返回-1,读至文件末尾,
long skip(long n)
跳过流中n个字节
int read(byte[] b)
读取字节存入byte数组中,最多能读b.length个字节
返回的是实际读取的字节个数
int available()
查看此输入流中剩余的字节数量
(2)构造器
FileOutputStream(File file)
FileOutputStream(File file, boolean append)
FileOutputStream(String name)
FileOutputStream(String name, boolean append)
创建一个指定路径的输出流对象,append表示在文件末尾追加
PS:如果指定路径下的文件名不存在,会自动创建。 如果父路径不存在,则报异常FileNotFoundException
常用方法:
void write(int b)
写出参数b中的一个字节,int类型的低八位。
void write(byte[] b)
将字节数组b中的字节按顺序写出
void write(byte[] b,int off,int len)
将字节数组b中的字节按顺序写出,从下标off,写len个
缓冲流:
BufferedOutputStream:字节缓冲输出流
在写数据时,如果一个字节一个字节的写,写的次数明显很多,效率就会变得低。
如何提高效率呢。
缓冲输出流的特点是:在流里维护了一个缓冲区,写字节时,先将字节
写入缓冲区, 当缓冲区满时,再一次性的将数据写到文件里。这样就
降低了写的次数,因此提高了效率。
因此缓冲输出流缺失即时性,可以使用flush方法进行冲刷
常用构造器:
BufferedOutputStream(OutputStream out)
创建一个指定字节输出流的缓冲流对象
BufferedOutputStream(OutputStream out,int size)
创建一个指定字节输出流的缓冲流对象,并设置缓冲区的大小
PS:当一次写的字节超出缓冲区大小,会出现溢出情况,溢出的字节
会先写出到文件中
常用方法:
void write(int b):
写int数据的低八位,写入缓冲区内
void write(byte[] b,int off,int len)
写指定长度len的字节数组,写入缓冲区
BufferedInputStream:字节缓冲输入流
在读取字节时,也是一个字节一个字节的读,次数多,效率低。
使用缓冲输入流,内部维护了一个缓冲区,默认8k,先一次性将缓冲区装满
等待读取.
当将缓冲区的数据读完,缓冲区再次存储后续数据。读取的次数明显降低
效率高
构造器:
BufferedInputStream(InputStream is);
BufferedInputStream(InputStream is,int size);
常用方法:
int read(byte[] bs)
读取缓冲区里的字节存储bs中,
当一次性得去的字节小于缓冲区,我们是从缓冲区里读数据,此时,效率高
当一次性读取的字节超出缓冲区大小。不使用缓冲区,直接从文件里读。
数据字节流,与缓冲流一样,父类都是过滤字节流(
FilterOutputStream/FilterInputStream
)
这两个类提供了几个特殊的方法,可以直接写基本数据类型
数据输出流:DataOutputStream
构造器:
DataOutputStream(OutputStream os)
创建一个指定字节输出流的数据输出流对象
常用方法:
除了提供写一个字节和写一个字节数组的方法外,还提供了如下方法
writeByte(int b)
writeShort(int s)
writeInt(int i)
writeLong(long l)
writeFloat(float f)
writeDouble(double d);
writeChar(int c);
writeBoolean(boolean b)
writeUTF(String s);