目录
- 文件写入
- 读取文件内容
- 删除文件
- 复制文件
- 向文件中追加数据
- 创建临时文件
- 文件/目录最后的修改日期
- 获取文件大小
- 文件重命名
- 设置文件只读
- 检测文件是否存在
- 创建文件
- 文件路径比较
- 递归创建目录
- 删除目录
- 判断目录是否为空
- 判断文件是否隐藏
- 获取目录大小
- 在指定目录中查找文件
- 获取文件的上级目录
- 遍历目录结构
- 遍历指定目录下的所有目录
- 输出指定目录下的所有文件
- 在指定目录中查找匹配文件
- 查看系统根目录
- 查看当前工作目录
文件写入
package com.example.demo;import org.junit.Test;import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;public class FileTests {@Testpublic void testWriteFile() throws IOException {BufferedWriter writer = new BufferedWriter(new FileWriter("demo.txt"));writer.write("你好!世界");writer.close();}
}
查看写入结果
$ cat demo.txt
你好!世界
读取文件内容
package com.example.demo;import org.junit.Test;import java.io.*;public class FileTests {@Testpublic void testReadFile() throws IOException {BufferedReader reader = new BufferedReader(new FileReader("demo.txt"));String line = null;while ((line = reader.readLine()) != null) {System.out.println(line);// 你好!世界}}
}
删除文件
package com.example.demo;import org.junit.Test;import java.io.*;public class FileTests {@Testpublic void testDeleteFile() throws IOException {File file = new File("demo.txt");boolean isDeleted = file.delete();}
}
复制文件
package com.example.demo;import org.junit.Test;import java.io.*;public class FileTests {@Testpublic void testCopyFile() throws IOException {InputStream input = new FileInputStream(new File("source.txt"));OutputStream output = new FileOutputStream(new File("target.txt"));byte[] buf = new byte[1024];int len = 0;while ((len = input.read(buf)) > 0) {output.write(buf, 0, len);}input.close();output.close();}
}
向文件中追加数据
package com.example.demo;import org.junit.Test;import java.io.*;public class FileTests {@Testpublic void testAppendFile() throws IOException {BufferedWriter writer = new BufferedWriter(new FileWriter("demo.txt", true));writer.write("Hello World!" + System.lineSeparator());writer.close();}
}
创建临时文件
方法签名
// prefix 前缀
// suffix 后缀
// directory 目录,需要提前创建好public static File createTempFile(String prefix, String suffix, File directory)public static File createTempFile(String prefix, String suffix)
package com.example.demo;import org.junit.Test;import java.io.*;public class FileTests {@Testpublic void testTempFile() throws IOException {File temp = File.createTempFile("temp_", ".txt", new File("temp"));File absoluteFile = temp.getAbsoluteFile();System.out.println(absoluteFile);BufferedWriter writer = new BufferedWriter(new FileWriter(temp));writer.write("Hello World!" + System.lineSeparator());writer.close();}
}
$ cat temp/temp_4469794763475912115.txtHello World!
文件/目录最后的修改日期
package com.example.demo;import org.junit.Test;import java.io.*;public class FileTests {@Testpublic void testLastModifiedFile() throws IOException {File file = new File("demo.txt");file.createNewFile();// 获取最后修改时间long lastModified = file.lastModified();System.out.println(lastModified);// 1696666928606// 修改文件最后的修改日期file.setLastModified(System.currentTimeMillis());System.out.println(file.lastModified());// 1696667018522}
}
获取文件大小
package com.example.demo;import org.junit.Test;import java.io.*;public class FileTests {@Testpublic void testGetFileSize() throws IOException {File file = new File("demo.txt");long length = file.length();System.out.println(length);// 434}
}
文件重命名
package com.example.demo;import org.junit.Test;import java.io.*;public class FileTests {@Testpublic void testRenameFile() throws IOException {File file = new File("demo.txt");File newFile = new File("newDemo.txt");boolean ret = file.renameTo(newFile);}
}
设置文件只读
package com.example.demo;import org.junit.Test;import java.io.*;public class FileTests {@Testpublic void testReadOnlyFile() {File file = new File("demo.txt");System.out.println(file.setReadOnly()); // trueSystem.out.println(file.canWrite()); // false}
}
检测文件是否存在
package com.example.demo;import org.junit.Test;import java.io.*;public class FileTests {@Testpublic void testFileExists() {File file = new File("demo.txt");System.out.println(file.exists()); // true}
}
创建文件
package com.example.demo;import org.junit.Test;import java.io.*;public class FileTests {@Testpublic void testCreateFile() throws IOException {File file = new File("demo.txt");System.out.println(file.createNewFile()); // true}
}
文件路径比较
package com.example.demo;import org.junit.Test;import java.io.*;public class FileTests {@Testpublic void testCompareFile() throws IOException {File file1 = new File("demo1.txt");File file2 = new File("demo2.txt");System.out.println(file1.compareTo(file2)); // -1}
}
递归创建目录
package com.example.demo;import org.junit.Test;import java.io.*;public class FileTests {@Testpublic void testMKDirs() throws IOException {File file = new File("./temp/demo");boolean result = file.mkdirs();System.out.println(result); // true}
}
删除目录
package com.example.demo;import org.junit.Test;import java.io.*;public class FileTests {public static boolean deleteDir(File dir) {// 递归删除目录中的文件if (dir.isDirectory()) {for (File file : dir.listFiles()) {boolean success = deleteDir(file);if (!success) {return false;}}}return dir.delete();}@Testpublic void testDeleteDirectory() {File file = new File("./temp");boolean result = deleteDir(file);System.out.println(result); // true}
}
判断目录是否为空
package com.example.demo;import org.junit.Test;import java.io.*;public class FileTests {public static boolean isEmptyDirectory(File dir) {if(!dir.isDirectory()){throw new RuntimeException("Not a Directory");}return dir.list().length == 0;}@Testpublic void testEmptyDirectory() {File file = new File("./temp");boolean result = isEmptyDirectory(file);System.out.println(result); // true}
}
判断文件是否隐藏
package com.example.demo;import org.junit.Test;import java.io.*;public class FileTests {@Testpublic void testHiddenFile() {File file = new File("./temp");boolean result = file.isHidden();System.out.println(result); // false}
}
获取目录大小
依赖
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.11.0</version>
</dependency>
package com.example.demo;import org.apache.commons.io.FileUtils;
import org.junit.Test;import java.io.*;public class FileTests {@Testpublic void testDirectorySize() {File file = new File("./temp");long sizeOfDirectory = FileUtils.sizeOfDirectory(file);System.out.println(sizeOfDirectory); // false}
}
在指定目录中查找文件
package com.example.demo;import org.junit.Test;import java.io.*;public class FileTests {@Testpublic void testFindFileFromDirectory() {File file = new File("./temp");String[] list = file.list();for (String filename : list) {System.out.println(filename);}}
}
获取文件的上级目录
package com.example.demo;import org.junit.Test;import java.io.File;public class FileTests {@Testpublic void testParent() {File file = new File("/temp/demo.txt");String parent = file.getParent();System.out.println(parent);// /temp}
}
遍历目录结构
package com.example.demo;import org.junit.Test;import java.io.File;public class FileTests {public static void showTree(int indent, File file) {// 缩进for (int i = 0; i < indent; i++) {System.out.print('-');}System.out.println(file.getName());if(file.isDirectory()){for (File f : file.listFiles()) {showTree(indent + 4, f);}}}@Testpublic void testShowTree() {showTree(0, new File("./temp"));}
}
打印结果
temp
----demo
--------demo1.txt
----demo.txt
遍历指定目录下的所有目录
package com.example.demo;import org.junit.Test;import java.io.File;
import java.io.FileFilter;public class FileTests {@Testpublic void testFileFilter() {File file = new File("./temp");FileFilter fileFilter = new FileFilter(){@Overridepublic boolean accept(File pathname) {return pathname.isDirectory();}};File[] files = file.listFiles(fileFilter);for (File f : files) {System.out.println(f);}}
}
输出指定目录下的所有文件
package com.example.demo;import org.junit.Test;import java.io.File;
import java.io.FileFilter;public class FileTests {@Testpublic void testListFiles() {File file = new File("./temp");File[] files = file.listFiles();for (File f : files) {System.out.println(f);}}
}
在指定目录中查找匹配文件
package com.example.demo;import org.junit.Test;import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;public class FileTests {@Testpublic void testListFiles() {File file = new File("./temp");FilenameFilter filter= new FilenameFilter(){@Overridepublic boolean accept(File dir, String name) {return name.endsWith(".txt");}};File[] files = file.listFiles(filter);for (File f : files) {System.out.println(f);}}
}
查看系统根目录
package com.example.demo;import org.junit.Test;import java.io.File;public class FileTests {@Testpublic void testListFiles() {File[] roots = File.listRoots();for (File f : roots) {System.out.println(f);}// /}
}
查看当前工作目录
package com.example.demo;import org.junit.Test;public class FileTests {@Testpublic void testCurrentDirectory() {String currentDir = System.getProperty("user.dir");System.out.println(currentDir);}
}
参考
https://www.nowcoder.com/tutorial/10001/d7671778e69f4fd2b66c6209b4bce9a4