java 实现读取本地日志文件列表并在浏览器上显示
2024-10-21 19:06:15
import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.io.*;
import java.net.MalformedURLException;
import java.net.URLEncoder;
import java.nio.file.Path;
import java.nio.file.Paths;
@RestController
@RequestMapping("file")
public class FileController1 {
private static final String directory = "D:/";
/**
* 获取文件列表
*/
@GetMapping("files")
public ResponseEntity<?> list(@RequestParam(required = false) String filename) throws Exception {
final File file = new File(directory, filename == null ? "" : filename);
if (file.isDirectory()) {
return ResponseEntity.ok().contentType(MediaType.TEXT_HTML).body(buildHtml(file));
} else {
if (file.length() > 5 * 1024 * 1024) {
final String name = file.getName();
return ResponseEntity.ok().header(HttpHeaders.CONTENT_DISPOSITION,
"attachment;filename*=UTF-8''" + URLEncoder.encode(name, "UTF-8")).body(download(file));
} else {
BufferedReader br = new BufferedReader(new FileReader(file));
final StringBuilder sb = new StringBuilder();
String st;
while ((st = br.readLine()) != null) {
sb.append(st).append("\n");
}
return ResponseEntity.ok().header("Content-Type", "text/plain;charset=UTF-8").body(sb.toString());
}
}
}
private Resource download(File file) throws MalformedURLException {
final String parent = file.getParent();
final String name = file.getName();
final Path path = Paths.get(parent).resolve(name);
return new UrlResource(path.toUri());
}
public String buildHtml(File file) {
final StringBuilder sb = new StringBuilder("<!DOCTYPE html><html lang='zh'><head><meta charset='UTF-8'></head><body><ul>");
final File[] files = file.listFiles();
final String parent = file.getParent();
if (parent != null) {
final String url = parent.substring(directory.length()).replaceAll("[\\\\/]", "%5C");
sb.append("<li><a href='/file/files?filename=").append(url).append("'>· ·</a></li>");
}
if (files != null) {
for (File file1 : files) {
final String filePath = file1.getPath().substring(directory.length());
final String fileUrl = filePath.replaceAll("[\\\\/]", "%5C");
sb.append("<li><a href='/file/files?filename=").append(fileUrl).append("'>").append(file1.getName()).append("</a></li>");
}
}
sb.append("</ul></body></html>");
return sb.toString();
}
}
最新文章
- js回顾2
- poj1251 最小生成树
- 利用PowerDesigner比较2个数据库结构
- nginx端口被占用解决方案
- 【PHP设计模式 03_JianDanGongChang.php】 简单工厂
- iphone获取当前磁盘信息
- 重构14-Break&#160;Responsibilities
- S - 骨牌铺方格(第二季水)
- ES6笔记① var 和 let的区别
- JAVA 8 新特性和改进
- BootStrap 轮播 Carousel
- java 客户端发起http请求
- python+selenium 环境搭建以及元素定位
- 爬虫(五)requests模块2
- hive函数应用之操作json
- Django:安装和启动
- 设计模式C++学习笔记之十七(Chain of Responsibility责任链模式)
- 003之MFCSocket异步编程(指针机制)
- asp.net webapi 返回json结果的方法
- ArcGIS案例学习笔记-找出最近距离的垂线
热门文章
- mysql 根据父id查询下级所有数据
- K8S资源控制器
- vue 图片分页
- Flink 状态后端及RocksDBStateBackend的优势
- c++练习270题:三角形个数
- 《Toward Fast, Flexible, and Robust Low-Light Image Enhancement》
- 音乐下载器,音乐解析软件,全网音乐免费下载,mp3格式音乐下载,flac格式音乐下载,无损音质音乐下载器,你想听的都搜的到~
- iframe 父子页面调用vue函数,并解决跨域问题,宽度自适应
- 使用Telnet伪造邮件发送
- C# 通过程序执行svn更新或提交更改