Java - 文件操作
文章目录
路径
绝对路径
Win
D:\GreenPackage\ja-netfilter-all-main\scripts
Linux
/home/demodeom/.ssh
相对路径
./
表示相对于当前文件所在的目录, 一般情况下./
可以省略../
表示相对于当前文件上一级目录
./ja-netfilter-all-main/scripts
ja-netfilter-all-main/scripts
../ja-netfilter-all-main/scripts
../../../ja-netfilter-all-main/scripts
文件 / 目录
文件 目录
目录 ja-netfilter-all-main/scripts
文件 ja-netfilter-all-main/scripts.txt
一般情况下, 带有扩展名的为文件, 比如 .txt
.exe
.pdf
等等
File
import java.io.File;
目录
创建目录
boolean mkdir()
创建目录, 如果目录已经存在或者父目录不存在, 返回 false; 创建成功返回 true
make directory
File f1 = new File("电影");
boolean f1_res = f1.mkdir();
System.out.println(f1_res); // true
File f2 = new File("电影/动作/国内/2022");
boolean f2_res = f2.mkdir();
System.out.println(f2_res); // false
boolean mkdirs()
创建目录, 如果目录已经存在, 返回 false; 创建成功返回 true; 通常用于创建多层目录
File f2 = new File("电影/动作/国内/2022");
boolean f2_res = f2.mkdirs();
System.out.println(f2_res);
删除目录
boolean delete()
删除目录; 如果目录不为空, 则删除失败, 返回 false; 删除成功返回 true
File f3 = new File("电影/动作/国内/2022");
boolean f3_res = f3.delete();
System.out.println(f3_res); // true
File f4 = new File("电影");
boolean f4_res = f4.delete();
System.out.println(f4_res); // false
文件
创建文件
boolean createNewFile()
- 如果文件已经存在, 返回
false
- 如果文件所在的目录不存在, 则抛出
IOException
异常
File f5 = new File("1.txt");
boolean f5_res = f5.createNewFile();
System.out.println(f5_res);
File f6 = new File("aa/1.txt");
boolean f6_res = f6.createNewFile();
System.out.println(f6_res); // 抛出 `IOException` 异常
删除文件
boolean delete()
删除文件
- 如果文件不存在, 则返回
false
- 如果文件删除成功, 则返回
true
File f7 = new File("1.txt");
boolean f7_res = f7.delete();
System.out.println(f7_res); // true
File f8 = new File("aa/1.txt");
boolean f8_res = f8.delete();
System.out.println(f8_res); // true
路径
绝对路径
String getAbsolutePath()
获取文件/目录绝对路径
File f9 = new File("Class01.java");
String absPath =f9.getAbsolutePath();
System.out.println(absPath); // D:\Project\Java\09\Class01.java
File f10 = new File("");
String absPath10 =f10.getAbsolutePath();
System.out.println(absPath10); // D:\Project\Java\09
父目录
String getParen()
返回文件或者目录的父目录名, 如果没有指定父目录, 则返回 null
File f13 = new File("电影/动作/国内/2022/1.txt");
String f13Name = f13.getParent();
System.out.println(f13Name); // 2022
File f14 = new File("电影/动作/国内/2022");
String f14Name = f14.getParent();
System.out.println(f14Name); // 电影/动作/国内
文件/目录名
String getName()
获取文件或者目录名
File f11 = new File("电影/动作/国内/2022");
String f11Name = f11.getName();
System.out.println(f11Name);
File f12 = new File("电影/动作/国内/2022/1.txt");
String f12Name = f12.getName();
System.out.println(f12Name);
文件/目录路径
String getPath()
返回文件或者目录的路径
File f16 = new File("电影/动作/国内/2022/1.txt");
String f16Path = f16.getPath();
System.out.println(f16Path); // 电影\动作\国内\2022\1.txt
File f17 = new File("电影/动作/国内/2022");
String f17Path = f17.getPath();
System.out.println(f17Path); // 电影\动作\国内\2022
权限
读权限
boolean canRead()
判断是否可以读取此文件。
- 如果文件不存在, 则返回 false
- 如果文件可读, 则返回 true
File f18 = new File("./1.txt");
boolean f18CanRead = f18.canRead();
System.out.println(f18CanRead); // false
File f19 = new File("./2.txt");
boolean f19CanRead = f19.canRead();
System.out.println(f19CanRead); // false
写权限
boolean canWrite()
判断是否可以写入。
- 如果文件不存在, 则返回 false
- 如果文件可写, 则返回 true
File f20 = new File("./1.txt");
boolean f20CanWrite = f20.canWrite();
System.out.println(f20CanWrite); // false
File f21 = new File("./2.txt");
boolean f20CanWrite = f21.canWrite();
System.out.println(f20CanWrite); // true
文件属性
long length()
返回文件的长度, 单位: 字节
File f22 = new File("./2.txt");
long f22Length = f22.length();
System.out.println(f22Length); // 29
File f23 = new File("电影/动作/国内/2022");
long f23Length = f23.length();
System.out.println(f23Length); // 0
如果是目录, 则长度为 0
long lastModified()
返回文件最后一次被修改的时间(时间戳)
File f24 = new File("./2.txt");
long f24LastMT = f24.lastModified();
System.out.println(f24LastMT); // 1667488238812
判断
判断是否存在
boolean exists()
判断文件或者目录是否存在; 如果存在, 返回 true
, 否则返回 false
File f25 = new File("./2.txt");
boolean f25Exit = f25.exists();
System.out.println(f25Exit); // true
判断是否是标准文件
boolean isFile()
判断路径是否是一个标准文件,
- 如果是标准文件, 返回
true
, 否则返回false
- 如果文件不存则, 返回
false
File f26 = new File("./2.txt");
boolean f26File = f26.isFile();
System.out.println(f26File);
判断是否是目录
boolean isDirectory()
判断路径是否是一个目录
- 如果是目录, 返回
true
, 否则返回false
- 如果目录不存则, 返回
false
File f27 = new File("电影");
boolean f27Dir = f27.isDirectory();
System.out.println(f27Dir);
目录遍历
String[] list()
返回指定目录下的所有文件或目录
File f28 = new File("./");
String[] f28Files = f28.list();
for (int i = 0; i < f28Files.length; i++) {
System.out.println(f28Files[i]);
}
public File[] listFiles()
返回指定目录下的所有文件或目录
File f29 = new File("./");
File[] f29Files = f29.listFiles();
for (int i = 0; i < f29Files.length; i++) {
String fileAbsPath = f29Files[i].getAbsolutePath();
System.out.println(fileAbsPath);
}
https://zditect.com/main/java/java-escape-characters.html
FileRead
int read(char [] c, int offset, int len)
读取字符到c数组,返回读取到字符的个数
读取固定的长度的内容
File f = new File("./1.txt");
FileReader fr = new FileReader(f);
char[] a = new char[50];
fr.read(a);
for (int i=0; i < a.length; i++){
System.out.print(a[i]);
}
读取所有的内容
File f = new File("./1.txt");
int fl = (int) f.length();
FileReader fr = new FileReader(f);
char[] a = new char[fl];
fr.read(a);
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]);
}
将 char[]
转换为字符串
String s = String.valueOf(a)
File Write
FileWriter(File file)
FileWriter(File file, boolean append)
file
File 类型的对象boolean
true, 表示追加; false: 表示覆盖
覆盖写
File f = new File("./1.txt");
FileWriter fw = new FileWriter(f);
fw.write("你好 Java");
fw.close();
追加写
File f = new File("./1.txt");
FileWriter fw = new FileWriter(f, true);
fw.write("; 2022年11月04");
fw.close();
注: 不能忘记关闭文件 fw.close();