可能是我正在使用MultipartFile上传功能。
我必须从csv文件中读取数据,客户将通过浏览器选择该数据。我使用MultipartFile上传文件。该文件即将进入控制器,但现在我无法从中读取csv数据。请指导最佳方法或帮助我从MultipartFile读取csv数据。 jsp有
<form method="POST" action="uploadFile" enctype="multipart/form-data">
File to upload: <input type="file" name="file"> <input
type="submit" value="Upload"> Press here to upload the
file!
</form>
控制器已
@RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
public String uploadFileHandler(@RequestParam("file") MultipartFile file) {
感谢。
答案 0 :(得分:18)
我使用缓冲区逐行读取并从多部分获取输入流。也许是更多的代码,但我找到了有用的阅读文本文件。
BufferedReader br;
List<String> result = new ArrayList<>();
try {
String line;
InputStream is = multipart.getInputStream();
br = new BufferedReader(new InputStreamReader(is));
while ((line = br.readLine()) != null) {
result.add(line);
}
} catch (IOException e) {
System.err.println(e.getMessage());
}
答案 1 :(得分:8)
我想出了一个解决方法。我将文件转换为字节,然后将字节转换为String。从String我应用了string.split()来获取我想要的文件。
@RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
public String uploadFileHandler(@RequestParam("file") MultipartFile file) {
if (!file.isEmpty()) {
try {
byte[] bytes = file.getBytes();
String completeData = new String(bytes);
String[] rows = completeData.split("#");
String[] columns = rows[0].split(",");
答案 2 :(得分:0)
我发现的最佳解决方案是
@PostMapping(value="/csv")
public ResponseEntity<Void> processUpload(@RequestParam MultipartFile file) {
BufferedReader fileReader = new BufferedReader(new
InputStreamReader(file.getInputStream(), "UTF-8"));
CSVParser csvParser = new CSVParser(fileReader, CSVFormat.DEFAULT);
Iterable<CSVRecord> csvRecords = csvParser.getRecords();
for (CSVRecord csvRecord : csvRecords) {
System.out.println(csvRecord);
}
...
的一种自适应解决方案