csv文件上传/读取/压缩/保存
import com.fasterxml.jackson.dataformat.csv.CsvMapper;
import com.fasterxml.jackson.dataformat.csv.CsvSchema;
import com.fasterxml.jackson.databind.SequenceWriter;
import com.fasterxml.jackson.dataformat.csv.CsvGenerator;
public String upload(Model model, HttpServletRequest request,
@RequestParam("uploadFile") MultipartFile file
, @AuthenticationPrincipal LoginUserDetails userDetails) {
Reader reader = new InputStreamReader(file.getInputStream(), "Shift_JIS");
Field[] fields = MyModel.class.getDeclaredFields();
CsvSchema.builder().addColumn(fields[0].getName(), CsvSchema.ColumnType.STRING)
.addColumn(fields[1].getName(), CsvSchema.ColumnType.STRING)
.addColumn(fields[2].getName(), CsvSchema.ColumnType.STRING)
.build();
CsvMapper csvMapper = new CsvMapper();
MappingIterator<Object> readValues = csvMapper.readerFor(MyModel.class)
.with(csvSchema.withHeader())
.readValues(reader);
List<Object> modelList = readValues.readAll();
List<FileModel> fileModelList = new ArrayList<>();
modelList.forEach(item ->{
MyModel myModel= (MyModel) item;
FileModel fileModel= new FileModel ();
fileModel.setInfo1(item.getInfo1());
fileModel.setInfo2(item.getInfo2());
fileModel.setInfo3(item.getInfo3());
fileModelList.add(fileModel);
});
CsvMapper csvMapper = new CsvMapper();
csvMapper.configure(CsvGenerator.Feature.ALWAYS_QUOTE_STRINGS, true);
CsvSchema csvSchema = csvMapper.schemaFor(FileModel.class);
int size = fileModelList.size();
int fileCreateCount = size % config.get1000() == 0
? (size / config.get1000())
: (size / config.get1000()) + 1;
List<File> filesInfoList = new ArrayList<>();
String filePath = "c.\\test.csv";
for (int i = 1; i < fileCreateCount; i++) {
File file = new File(filePath);
filesInfoList.add(file);
Path path = Paths.get(filePath);
try (BufferedWriter bw =
Files.newBufferedWriter(path, Charset.forName("Shift_JIS"));
SequenceWriterwriter=csvMapper
.writer(csvSchema.withHeader().withLineSeparator("\r\n"))
.writeValues(bw)) {
List<FileModel> subList = fileModelList.subList(0, config.get1000());
for (FileModel model : subList) {
writer.write(model);
}
} catch (IOException e) {
log.warn("stream writer error");
this.serviceFileDelete(filesInfoList);
}
fileModelList.subList(0, config.get1000()).clear();
}
Path path = Paths.get(filePath);
try (BufferedWriter bw = Files.newBufferedWriter(path, Charset.forName("Shift_JIS"));
SequenceWriter writer = csvMapper.writer(csvSchema.withHeader().withLineSeparator("\r\n"))
.writeValues(bw)) {
for (FileModel model : fileModelList) {
writer.write(model);
}
File zipFile = new File("c:\\test.zip");
OutputStream outputStream = new FileOutputStream(zipFile);
FileToZipUtils.toZip(filesInfoList, outputStream);
try (InputStream inputStream = new FileInputStream(zipFile)) {
this.fileSave();
}
}
保存用的实体类设置:输出文件表头设置
import java.io.Serializable;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import lombok.Data;
@Data
@JsonPropertyOrder({ "インフォ1", "インフォ2", "インフォ3" })
public class FileModel implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("インフォ1")
private String info1;
@JsonProperty("インフォ2")
private String info2;
@JsonProperty("インフォ3")
private String info3;
}
文件压缩工具类/zip化
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class FileToZipUtils {
public static void toZip(List<File> srcFiles, OutputStream out) throws IOException {
long start = System.currentTimeMillis();
try (ZipOutputStream zos = new ZipOutputStream(out)) {
for (File srcFile : srcFiles) {
byte[] buf = new byte[512];
zos.putNextEntry(new ZipEntry(srcFile.getName()));
int len;
try(FileInputStream in = new FileInputStream(srcFile)){
while ((len = in.read(buf)) != -1) {
zos.write(buf, 0, len);
}
zos.closeEntry();
}
}
long end = System.currentTimeMillis();
log.info("to Zip:OK" + (end - start) + " ms");
}
}
private FileToZipUtils() {
}
}
转载请注明原文地址:https://ipadbbs.8miu.com/read-42599.html