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();
}
}

java 实现读取本地日志文件列表并在浏览器上显示的更多相关文章

  1. nodejs读取本地txt文件并输出到浏览器

    var fs = require('fs'); var chrome=""; //同步执行 function tongbu(){ var data =fs.readFileSync ...

  2. JAVA读取本地html文件里的html文本

    /** * 读取本地html文件里的html代码 * @param file File file=new File("文件的绝对路径") * @return */ public s ...

  3. jmeter读取本地CSV文件

    用jmeter录制考试上传成绩等脚本时,出现的问题及解决方法如下: 1.beanshell前置处理器,不能读取本地csv文件里的数据: 方法一: 在beanshell里不能直接从本地的csv文件里读取 ...

  4. Java学习-042-获取目录文件列表(当前,级联)

    以下三个场景,在我们日常的测试开发中经常遇到: 软件自动化测试,在进行参数测试时,我们通常将所有相似功能的参数文件统一放在一个目录中,在自动化程序启动的时候,获取资源参数文件夹中所有参数文件,然后解析 ...

  5. 读取本地json文件,并转换为dictionary

    // 读取本地JSON文件 - (NSDictionary *)readLocalFileWithName:(NSString *)name { // 获取文件路径 NSString *path = ...

  6. jQuery ajax读取本地json文件

    jQuery ajax读取本地json文件 json文件 { "first":[ {"name":"张三","sex": ...

  7. node.js读取到的文件列表

    var fs = require('fs'); var path = require('path'); //解析需要遍历的文件夹,我这以E盘根目录为例 var filePath = path.reso ...

  8. JavaScript读取本地json文件

    JavaScript读取本地json文件 今天调试了一上午,通过jQuery读取本地json文件总是失败,始终找不出原因,各种方法都试了 开始总以为是不是json格式的问题.高了半天不行 后来读了一个 ...

  9. 读取本地json文件,转出为指定格式json 使用Base64进行string的加密和解密

    读取本地json文件,转出为指定格式json   引用添加Json.Net 引用命名空间 using Newtonsoft.Json //读取自定目录下的json文件StreamReader sr = ...

  10. Bootstrap做的HTML页面在本地IE打开正常,放到服务器上显示就不正常了

    <meta name="renderer" content="webkit"> <meta http-equiv="X-UA-Com ...

随机推荐

  1. s-hr实现单点登录,看我这份笔记就够了!!!

    https://pan.kingdee.com/s/MTA5ODk4NyxjNzk1来自:云之家企业云盘

  2. 腾讯QQ v9.7.3.28946 绿色优化版

    修改历史: 2023.02.13:自改官方 9.7.3.28946 最新正式版本2023.01.15:自改官方 9.7.1.28940 最新正式版本2023.01.07:自改官方 9.7.1.2893 ...

  3. c++练习270题:三角形个数

    *270题 原题传送门:http://oj.tfls.net/p/270 题解: #include<bits/stdc++.h>using namespace std;int a,b,c, ...

  4. Codeforces 1281E

    Link 题意:一棵$2n$个点的树让你分配$n$对居民在点上求每对居民之间路径和的最小值和最大值 思路:考虑一条边$(u, v)$ 1.若要使答案尽可能大,那么这条边应该取到尽可能多次.显然,如果$ ...

  5. vue3新特性的使用

    1.Suspense组件:等待异步组件时渲染一些额外内容,让应用有更好的用户体验 例: <template> <div class="app"> <h ...

  6. foreach 和for

    "foreach和for循环如果只是遍历集合或者数组,用foreach好些,如果是对集合中的值进行修改,就要用for循环了,其实foreach的内部原理其实也是Iterator,但不能像It ...

  7. 记录将Base64字符串转化为图片遇到的问题

    今天通过与别人写的api交互,获取到了一个原为图片的base64字符串,在网上找到了相互转换的方法,但是在转化时,报出了"输入不是有效的 Base64 字符串,因为它包含非 base 64 ...

  8. java 枚举使用

    /** * 埋点模块枚举 * @author huang */ public enum ModelEnum { PROCESS_CONTROL("流程管控", 10), TASK_ ...

  9. 7、Taylor公式(泰勒公式)通俗+本质详解

    参考:https://zhuanlan.zhihu.com/p/392808684 1.比较通俗地讲解一下泰勒公式是什么. 泰勒公式,也称泰勒展开式.是用一个函数在某点的信息,描述其附近取值的公式.如 ...

  10. 如何在eclipse里的动态Web项目建立后缀为xml的文件

    1.右击Dynamic Web Project类型项目的WEB-INF->new->Other->XML,选择XML File2 点击next改名字为web(后缀不要动哦)3. 点击 ...