例题: 构造文件对象
File file = new File("pom.xml");
file = new File("/root/example_dir/example_file.txt");例题: getName方法
File file = new File("pom.xml");
assertEquals("pom.xml", file.getName());例题: length方法
File file = new File("pom.xml");
assertTrue(file.length() >= 0); // return file bytes例题: lastModified方法
File file = new File("pom.xml");
long lastModified = file.lastModified();
String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(lastModified));
System.out.println(date); // 2021-08-31 09:27:21例题: exists方法
File file = new File("pom.xml");
assertTrue(file.exists());
file = new File("pom_bk.xml");
assertFalse(file.exists());例题: delete方法
File file = new File("pom_bk.xml");
assertTrue(file.createNewFile());
assertTrue(file.exists());
assertTrue(file.delete());
assertFalse(file.exists());例题: 目录创建及删除
File file = new File("temp");
assertTrue(file.mkdir());
assertTrue(file.delete());
assertFalse(file.exists());例题: 文件过滤器过滤文件
File file = new File(".");
File[] files = file.listFiles((dir, name) -> name.endsWith(".xml"));
assert files != null;
assertEquals(1, files.length);
assertEquals("pom.xml", files[0].getName());例题: 递归遍历所有文件(包含子文件夹的文件)
public static void printFiles(File dir) {
System.out.print("\t");
if (dir.isFile()) {
System.out.println(dir.getName());
} else {
System.out.println(dir.getName() + "/");
for (File file : Objects.requireNonNull(dir.listFiles())) {
printFiles(file);
}
}
}- 字节流
- 字符流
- 输入流
- 输出流
例题: 写入字符A和B到文件中,分两次
String fileName = "example.txt";
try (Writer writer = new FileWriter(fileName)) {
writer.write('A');
writer.write(66); //write B
}例题: 写入字符串到文件中
String fileName = "example.txt";
try (Writer writer = new FileWriter(fileName)) {
writer.write("hello");
}例题: 写入字符数组到文件中
char[] letters = {'J', 'a', 'v', 'a'};
String fileName = "example.txt";
try (Writer writer = new FileWriter(fileName)) {
writer.write(letters);
}例题: 写入字符数组的一部分内容
char[] letters = {'J', 'a', 'v', 'a'};
String fileName = "example.txt";
try (Writer writer = new FileWriter(fileName)) {
writer.write(letters, 1, 2);
}
assertEquals("av", FileReaderExample.read(fileName));
Files.deleteIfExists(Paths.get(fileName));例题: 一次读取单个字符
String filename = "example.txt";
try (Writer writer = new FileWriter(filename)) {
writer.write("Java");
}
try (Reader reader = new FileReader(filename)) {
assertEquals('J', reader.read());
assertEquals('a', reader.read());
assertEquals('v', reader.read());
assertEquals('a', reader.read());
assertEquals(-1, reader.read());
}
Files.deleteIfExists(Paths.get(filename));例题: 循环读取所有字符
String filename = "example.txt";
try (Writer writer = new FileWriter(filename)) {
writer.write("Java");
}
try (Reader reader = new FileReader(filename, StandardCharsets.UTF_8)) {
char[] letter = new char[4];
int index = 0;
int ch;
while ((ch = reader.read()) != -1) {
letter[index++] = (char)ch;
}
assertEquals("Java", new String(letter));
}例题: 逐个读取文件里面的所有字符
String filename = "example.txt";
try (Writer writer = new FileWriter(filename)) {
writer.write("I love\n");
writer.write("Java");
}
try (Reader reader = new FileReader(filename, StandardCharsets.UTF_8)) {
char[] buffer = new char[1024];
int len;
StringBuilder builder = new StringBuilder();
while ((len = reader.read(buffer)) != -1) {
builder.append(StringUtils.toString(buffer, 0, len));
}
assertEquals("I love\nJava", builder.toString());
}例题: 复制文本文件
String filename = "pom.xml";
String newFile = "pom_bk.xml";
try (Writer writer = new FileWriter(newFile); Reader reader = new FileReader(filename)) {
int ch;
while ((ch = reader.read()) != -1) {
writer.write(ch);
}
writer.flush();
assertEquals(new File(filename).length(), new File(newFile).length());
}finally {
Files.deleteIfExists(Paths.get(newFile));
}例题: 复制二进制文件
String srcPath = "pom.xml";
String destPath = "pom.xml.bk";
try (InputStream inputStream = new FileInputStream(srcPath);
OutputStream outputStream = new FileOutputStream(destPath)) {
byte[] bytes = new byte[1024];
int readBytes;
while ((readBytes = inputStream.read(bytes)) != -1) {
outputStream.write(bytes, 0, readBytes);
}
assertEquals(new File(srcPath).length(), new File(destPath).length());
}例题: 缓冲区复制文件
String filename = "pom.xml";
String newFileName = "pom_bk.xml";
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(filename));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFileName))) {
byte[] buffer = new byte[1024];
int readBytes;
while ((readBytes = bis.read(buffer)) != -1) {
bos.write(buffer, 0, readBytes);
bos.flush();
}
assertEquals(new File(filename).length(), new File(newFileName).length());
}例题: 拷贝文本文件
String filename = "pom.xml";
String newFileName = "pom_bk.xml";
try (BufferedReader bufferedReader = new BufferedReader(new FileReader(filename));
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(newFileName))) {
String line = bufferedReader.readLine();
while (line != null) {
String nextLine = bufferedReader.readLine();
bufferedWriter.write(line);
if (nextLine != null) {
bufferedWriter.write(System.lineSeparator());
}
bufferedWriter.flush();
line = nextLine;
}
assertEquals(new File(filename).length(), new File(newFileName).length());
}例题: 输出字符串到文件
String filename = "example.txt";
PrintStream printStream = new PrintStream(filename);
printStream.writeBytes("Java".getBytes(StandardCharsets.UTF_8));
assertEquals("Java", FileReaderExample.read(filename));例题: 基本数据类型的读写
String filename = "example.txt";
try (DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream(filename));
DataInputStream dataInputStream = new DataInputStream(new FileInputStream(filename))) {
dataOutputStream.writeInt(97);
dataOutputStream.flush();
assertEquals(97, dataInputStream.readInt());例题: 文件随机访问
String filename = "example.txt";
try(PrintStream printStream = new PrintStream(new FileOutputStream(filename));
RandomAccessFile randomAccessFile = new RandomAccessFile(filename, "rw")) {
printStream.write("Java".getBytes(StandardCharsets.UTF_8));
printStream.flush();
assertEquals('J', randomAccessFile.read());
randomAccessFile.seek(2);
assertEquals('v', randomAccessFile.read());
randomAccessFile.write("123".getBytes(StandardCharsets.UTF_8));
randomAccessFile.seek(0);
assertEquals("Jav123", randomAccessFile.readLine());
}
assertTrue(Files.deleteIfExists(Paths.get(filename)));