【发布时间】:2021-06-19 09:00:07
【问题描述】:
很抱歉,我没有找到这样的问题,所以我创建了一个新问题。
我学习 Java,这是我第一个真正的实践项目。 我需要制作一个文件解析器。所以我为一个文件做了它并且它有效。 但我需要它来处理文件目录。
所以,在视图中我已经改变了
File to parse: <input type="file" th:field="*{address}" id="address">
开
File to parse: <input type="file" th:field="*{address}" id="address" webkitdirectory directory multiple>
在View中效果很好,我现在可以选择所有目录了。
但是我应该如何更改我的控制器以不使用一个文件而是使用文件列表? 我应该创建新模型吗?
我看到的另一种方式,在查看目录的方式中选择,而不是文件。但我没有找到,如何使用文件资源管理器(就像浏览器使用输入类型 =“文件”一样)。
另外,我做了这个类,它可以解析几个文件。主要问题是如何在多个文件的情况下与视图和逻辑建立“关系”。
有人可以帮忙吗? 非常感谢!
我的文件模型:
public class File {
private String address;
public File() {
}
public File(String address) {
this.address = address;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
我的控制器:
@Controller
@RequestMapping("/parser")
public class ParserController {
private final FileParser fileParser;
@Autowired
public ParserController(FileParser fileParser) {
this.fileParser = fileParser;
}
@GetMapping()
public String parser(Model model) {
model.addAttribute("file", new File());
return "parser/parser";
}
@PostMapping
public String create(@ModelAttribute("file") File file) throws IOException {
FileParser.parse(file);
return "parser/done";
}
}
我的解析器(它不是真正的逻辑,仅作为示例):
@Component
public class FileParser {
public static void parse(File file) throws IOException {
Path pathFrom = Path.of(file.getAddress());
Path pathTo = Files.createFile(Path.of("C:\\Users\\Xiaomi\\Desktop\\parsedtest.txt"));
List<String> list = new ArrayList<>();
list = Files.readAllLines(pathTo);
list.add("file");
list.add("was");
list.add("parsed");
FileOutputStream fos = new FileOutputStream(String.valueOf(pathTo));
PrintStream printer = new PrintStream(fos);
printer.flush();
printer.close();
FileWriter writer = new FileWriter(String.valueOf(pathTo));
for (String lister:
list) {
writer.write(lister+"\n");
}
writer.close();
}
并查看:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>MEL Parser</title>
</head>
<body>
<form enctype="multipart/form-data" method="POST" action="/parser" th:object="${file}">
File to parse: <input type="file" th:field="*{address}" id="address" webkitdirectory directory multiple>
<br/>
<br/>
<input type="submit" value="Parse">
</form>
</body>
</html>
【问题讨论】: