Files
rikako-note/java se/java文件操作.md
2022-04-13 15:53:57 +08:00

147 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Java文件操作
* ## Path路径
* path路径可分为绝对路径和相对路径绝对路径从根路径开始而相对路径则不是
* Path类的api如下
```java
/*
* 获取路径,其会将参数中的给定字符串连接起来,创建路径
* 如果不是文件系统中的合法路径会抛出InvalidPathException
* Paths.get并不要求文件系统中一定存在对应的文件
*/
Paths.get(String first,String... more)
// 解析路径
// 如果path2是绝对路径则会返回path2
// 否则以path1为基本路径返回path2想对于path1产生的路径
path1.resolve(path2)
path1.resolve(String)
// 将path1父路径作为基本路径解path2的析兄弟路径
path1.resolveSibling(path2)
path1.resolveSibling(String)
// 以path1为基本路径返回path2想对于path1的相对路径
path1.relativize(path2)
// 移除.和..等多余元素
path1.toAbsolutePath()
// 获取文件名称
path1.getFileName()
// 获取根路径
path1.getRoot()
// 获取父路径如果当前文件没有父路径返回null
path1.getParent()
// 以当前路径创建元素
path1.toFile()
# 上述操作都不要求path所对应的文件在文件系统中已经存在
```
* ## 文件读写
* Files类相关文件操作的api
```java
// 读取路径所对应文件的所有字节
Files.readAllBytes(path)
// 按行读入文件的内容,并且将文件的行保存在字符串的集合中
Files.readAllLines(path,charset)
// 向文件中写入数据
// 可以通过StandardOpenOpition来指定数据是append还是覆盖
Files.write(path,bytes,charset,StandardOpenOpition.xxx)
Files.write(path,lines,charset,StandardOpenOption.xxx)
// 通过FIles类获取输入输出流
Files.newInputStream(path,options)
Files.newOutputStream(path,options)
FIles.newBufferedReader(path,charset)
Files.newBufferedWriter(path,charset,options)
```
* ## 创建文件和目录
```java
// 通过Files类创建目录
// 其中createDirectory方法中path路径中的中间目录都应该已
// 存在,而且当想要创建的目录已经存在时会抛出异常
// 而createDirectories方法中中间路径可以不存在在通过path创
// 建目录时会联通中间路径一起创建,但是,此方法在想要创
// 建的目录已经存在时不会抛出异常
Files.createDirectory(path)
Files.createDirectories(path)
# 注意其中createDirecotry(path)操作是原子的
# 但是createDirectories()不是原子的,多进程条件下可能存在竞争
// 通过FIles类创建文件
// 当文件已经存在时,会抛出一场
// 该创建文件的操作是原子的
Files.createFile(path)
// 创建临时文件和临时文件夹
Files.createTempFile(basedir,prefix,suffix)
FIles.createTempFile(prefix,suffix)
Files.createTempDirecotry(basedir,prefix)
FIles.createTempDirectory(prefix)
# 可以为生成的临时文件调用deleteOnExit方法来让临时文件在进程退出时删除
# 在linux环境下临时文件和目录生成在/tmp目录下
```
* ## 移动、复制、删除文件
```java
// 移动、复制文件
Files.copy(from,to)
FIles.move(from,to)
# 对于move和copy操作如果目标路径已经存在那么操作将失败并抛出异常
# 可以指定REPLACE_EXISTING来覆盖已经存在的路径
# 默认情况下移动和复制都不是原子的可以通过ATOMIC_MOVE来指定移动操
# 作是原子的,但是复制操作并不支持原子性操作
# 可以将输入流中的内容复制到path对应的文件中也可以将path对应文件的
# 内容输出到流中
// 删除文件
// 若该文件不存在,会抛出异常
// 删除操作并不是原子的,由于要检查该文件是否是目录
// 如果文件是目录,只有当该目录为空时才能删除成功
Files.delete(path)
```
* ## 获取文件属性
```java
// 文件是否存在
Files.exists()
// 文件是否是隐藏文件爱你
Files.isHidden()
// 对文件是否有读写执行权限
Files.isReadable()
Files.isWritable()
FIles.isExecutable()
// 文件类型是否是目录、普通文件、符号链接
Files.isRegularFIle()
FIles.isDirectory()
FIles.isSymbolicLink()
// 获取文件长度
FIles.size()
```
* ## 访问目录中的项
```java
// 将目录中的项以Stream的形式返回
// Files.list并不会递归的列出子目录中的项
Files.list(dirPath)
// 递归列出子目录的项
// 可以通过指出depth来指定遍历的深度
FIles.walk(rootPath,depth)
```