|
6 | 6 | import lombok.Data;
|
7 | 7 | import lombok.NoArgsConstructor;
|
8 | 8 | import org.springframework.util.ObjectUtils;
|
| 9 | +import org.springframework.web.multipart.MultipartFile; |
9 | 10 |
|
10 | 11 | import java.io.*;
|
11 | 12 | import java.lang.reflect.Field;
|
@@ -156,6 +157,38 @@ public static Map<String, Object> readCsv(String csvFilePath, boolean isHasHeade
|
156 | 157 | return result;
|
157 | 158 | }
|
158 | 159 |
|
| 160 | + /** |
| 161 | + * 解析 CSV 文件,返回CSV的数据。 |
| 162 | + * |
| 163 | + * @param multipartFile controller 前端上传文件类型的参数值提交。 |
| 164 | + * @param isHasHeader csv文件中是否包含表头数据 |
| 165 | + * @return {"data":[...], "header": []} 其中可有可无 |
| 166 | + */ |
| 167 | + public static Map<String, Object> readCsv(MultipartFile multipartFile, Boolean isHasHeader) { |
| 168 | + Map<String, Object> result = new HashMap<>(2); |
| 169 | + try { |
| 170 | + // 中文乱码问题:源文件的编码格式与程序设置的读取格式不一致所致(调整csv文件为UTF-8集合) |
| 171 | + DataInputStream in = new DataInputStream(multipartFile.getInputStream()); |
| 172 | + BufferedReader reader = new BufferedReader(new InputStreamReader(in, "gbk")); |
| 173 | + if (isHasHeader) { |
| 174 | + result.put("header", reader.readLine()); |
| 175 | + } |
| 176 | + String line; |
| 177 | + List<List<String>> dataList = new ArrayList<>(); |
| 178 | + while ((line = reader.readLine()) != null) { |
| 179 | + String[] parts = splitCSV(line); |
| 180 | + if (!ObjectUtils.isEmpty(parts)) { |
| 181 | + List<String> lineData = Arrays.asList(parts); |
| 182 | + dataList.add(lineData); |
| 183 | + } |
| 184 | + } |
| 185 | + result.put("data", dataList); |
| 186 | + } catch (Exception exception) { |
| 187 | + exception.printStackTrace(); |
| 188 | + } |
| 189 | + return result; |
| 190 | + } |
| 191 | + |
159 | 192 | public static void testSplitCSV() {
|
160 | 193 | String src1 = "\"fh,zg\",sdf,\"asfs,\",\",dsdf\",\"aadf\"\"\",\"\"\"hdfg\",\"fgh\"\"dgnh\",hgfg'dfh,\"asdfa\"\"\"\"\",\"\"\"\"\"fgjhg\",\"gfhg\"\"\"\"hb\"";
|
161 | 194 | try {
|
|
0 commit comments