15.java 中 IO 流分为几种?

流按照不同的特点,有很多种划分方式。

按照流的流向分,可以分为输入流和输出流;

按照操作单元划分,可以划分为字节流和字符流;

按照流的角色划分为节点流和处理流

Java Io 流共涉及 40 多个类,看上去杂乱,其实都存在一定的关联, Java I0 流的 40 多个类都是从如下 4 个抽象类基类中派生出来的。

InputStream/Reader: 所有的输入流的基类,前者是字节输入流,后者是字符输入流。

OutputStream/Writer: 所有输出流的基类,前者是字节输出流,后者是字符输出流。

16.BIO、NIO、AIO 有什么区别?

BIO:blocking IO,同步阻塞IO,一个连接一个线程,发起请求一直阻塞,适用于连接数目小且固定的架构,是JDK4之前的唯一选择。

NIO:java non-blocking IO,JDK4引入的,同步非阻塞IO,一个请求一个线程,多个连接一个线程,数据面向缓冲区Buffer。

AIO:Asynchronous I/O,JDK7引入的,异步非阻塞IO 一个有效请求一个线程,IO请求立即返回,操作结束后通知,适用于连接数目较多且连接时间较长的应用。

17.Files的常用方法都有哪些?

isExecutable:文件是否可以执行

isSameFile:是否同一个文件或目录

isReadable:是否可读

isDirectory:是否为目录

isHidden:是否隐藏

isWritable:是否可写

isRegularFile:是否为普通文件

getPosixFilePermissions:获取POSIX文件权限,windows系统调用此方法会报错 setPosixFilePermissions:设置POSIX文件权限

getOwner:获取文件所属人

setOwner:设置文件所属人

createFile:创建文件

newInputStream:打开新的输入流

newOutputStream:打开新的输出流

createDirectory:创建目录,当父目录不存在会报错

createDirectories:创建目录,当父目录不存在会自动创建

createTempFile:创建临时文件

newBufferedReader:打开或创建一个带缓存的字符输入流

probeContentType:探测文件的内容类型

list:目录中的文件、文件夹列表

find:查找文件

size:文件字节数

copy:文件复制

lines:读出文件中的所有行

move:移动文件位置

exists:文件是否存在

walk:遍历所有目录和文件

write:向一个文件写入字节

delete:删除文件

getFileStore:返回文件存储区

newByteChannel:打开或创建文件,返回一个字节通道来访问文件

readAllLines:从一个文件读取所有行字符串

setAttribute:设置文件属性的值

getAttribute:获取文件属性的值

newBufferedWriter:打开或创建一个带缓存的字符输出流

readAllBytes:从一个文件中读取所有字节

createTempDirectory:在特殊的目录中创建临时目录

deleteIfExists:如果文件存在删除文件

notExists:判断文件不存在

getLastModifiedTime:获取文件最后修改时间属性

setLastModifiedTime:更新文件最后修改时间属性

newDirectoryStream:打开目录,返回可迭代该目录下的目录流

walkFileTree:遍历文件树,可用来递归删除文件等操作