// 文件的拷贝
BufferedInputStream in = FileUtil.getInputStream("d:/桌面/HuTool学习.md");
BufferedOutputStream out = FileUtil.getOutputStream("d:/桌面/HuTool学习复制.md");
long copySize = IoUtil.copy(in, out, IoUtil.DEFAULT_BUFFER_SIZE);
// 拷贝文件的大小
System.out.println(copySize);
System.out.println("拷贝成功");
in.close();
out.close();
用于文件类型的判断,返回值为文件的类型
File file = FileUtil.file("d:/桌面/HuTool学习.md");
String type = FileTypeUtil.getType(file);
//输出的是文件的格式
Console.log(type);
在以前,我们需要监听文件的变化:创建修改删除等,需要进行遍历来定时检查文件,效率很低,性能很差,所以有了这个工具类。
监听指定事件
File file2 = FileUtil.file("example.properties");
//这里只监听文件或目录的修改事件
WatchMonitor watchMonitor = WatchMonitor.create(file2, WatchMonitor.ENTRY_MODIFY);
watchMonitor.setWatcher(new Watcher(){
@Override
public void onCreate(WatchEvent> event, Path currentPath) {
Object obj = event.context();
Console.log("创建:{}-> {}", currentPath, obj);
}
@Override
public void onModify(WatchEvent> event, Path currentPath) {
Object obj = event.context();
Console.log("修改:{}-> {}", currentPath, obj);
}
@Override
public void onDelete(WatchEvent> event, Path currentPath) {
Object obj = event.context();
Console.log("删除:{}-> {}", currentPath, obj);
}
@Override
public void onOverflow(WatchEvent> event, Path currentPath) {
Object obj = event.context();
Console.log("Overflow:{}-> {}", currentPath, obj);
}
});
//设置监听目录的最大深入,目录层级大于制定层级的变更将不被监听,默认只监听当前层级目录
watchMonitor.setMaxDepth(3);
//启动监听
watchMonitor.start();
监听全部事件
WatchMonitor.createAll(file, new SimpleWatcher(){
@Override
public void onModify(WatchEvent> event, Path currentPath) {
Console.log("EVENT modify");
}
}).start();
//默认UTF-8编码,可以在构造中传入第二个参数做为编码
FileReader fileReader = new FileReader("d:/桌面/HuTool测试.txt");
String result = fileReader.readString();
System.out.println(result);
FileWriter writer = new FileWriter("d:/桌面/HuTool测 试.txt");
writer.write("添加文本",true);
主要用于类似日志这种(此类只有在写入文件的时候打开文件,写入结束之后,此类不需要关闭)
File file = new File("d:/桌面/HuTool测试.txt");
FileAppender appender = new FileAppender(file, 16, true);
appender.append("lolly1023");
appender.append("追加");
appender.append("成功");
appender.flush();
appender.toString();
有时候需要启动线程来“监控”文件的变化,类似于Linux下的tail -f
命令
Tailer tailer = new Tailer(FileUtil.file("d:/桌面/test.log"), Tailer.CONSOLE_HANDLER, 2);
tailer.start();
实时打印文件变化的类
/**
* 命令行打印的行处理器
*
* @author looly
* @since 4.5.2
*/
public static class ConsoleLineHandler implements LineHandler {
@Override
public void handle(String line) {
Console.log(line);
}
}
该方法会阻塞线程
获取文件名
File file = FileUtil.file("d:/桌面/HuTool学习.md");
// HuTool学习.md
String name = FileNameUtil.getName(file);
System.out.println(name);
单独获取主文件名与扩展名
File file1 = FileUtil.file("d:/桌面/HuTool学习.md");
// "HuTool学习"
String name1 = FileNameUtil.mainName(file1);
System.out.println(name1);
// "md"
String name2 = FileNameUtil.extName(file1);
System.out.println(name2);