csv 文件上傳和下載方法匯總

void uploadSomeType(@RequestParam("uploadFile") MultipartFile multipartFile) {

? ? ? ? //進(jìn)行文件讀取配置

? ? ? ? CsvReadConfig csvReadConfig = new CsvReadConfig();

? ? ? ? csvReadConfig.setSkipEmptyRows(true);

? ? ? ? csvReadConfig.setContainsHeader(true);

? ? ? ? //構(gòu)建 CsvReader 對象

? ? ? ? CsvReader csvReader = CsvUtil.getReader(csvReadConfig);

? ? ? ? //讀取文件,封裝成 Bean

? ? ? ? if (null == multipartFile) {

? ? ? ? ? ? log.info("設(shè)備類型文件不能為空!");

? ? ? ? ? ? return new BaseResponse<>(ApiResponseStatus.COMMON_FAIL);

? ? ? ? }

? ? ? ? ArrayList<SomeType> deviceTypeList = new ArrayList<SomeType>();

? ? ? ? try {

? ? ? ? ? ? File file = uploadFile(multipartFile);

? ? ? ? ? ? deviceTypeList = (ArrayList<SomeType>) csvReader.read(new FileReader(file), SomeType.class);

? ? ? ? ? ? file.delete();

? ? ? ? } catch (Exception e) {

? ? ? ? ? ? log.info("設(shè)備類型文件上傳失?。。?!");

? ? ? ? }

? ? ? ? //判重后,添加設(shè)備類型入庫

? ? ? ? for(SomeType deviceType:deviceTypeList){

? ? ? ? }

}

postman文件上傳:



//導(dǎo)出到csv文件

public static <T> void downloadsToCsvFile(HttpServletResponse response, List<T> list, String uniPath, String filenam, String cment, Locale locale) throws IOException {

? ? ? ? File file;

? ? ? ? try {

? ? ? ? ? ? //響應(yīng)類型

? ? ? ? ? ? response.setContentType("multipart/form-data");

? ? ? ? ? ? response.setCharacterEncoding("utf-8");

? ? ? ? ? ? // 這里URLEncoder.encode可以防止中文亂碼

? ? ? ? ? ? String fileNameStr = URLEncoder.encode( filename, "UTF-8").replace("+", "%20");

? ? ? ? ? ? //響應(yīng)的是? .csv 文件的后綴

? ? ? ? ? ? response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileNameStr + ".csv");

? ? ? ? ? ? String filePath=staticFilePath+ uniquePath +filename+".csv";

? ? ? ? ? ? log.info("-----filePath {}", filePath);

? ? ? ? ? ? file=new File(filePath);

? ? ? ? ? ? File dir = file.getParentFile();

? ? ? ? ? ? // 創(chuàng)建文件夾

? ? ? ? ? ? if (!dir.exists()) {

? ? ? ? ? ? ? ? dir.mkdirs();

? ? ? ? ? ? }

? ? ? ? ? ? // 創(chuàng)建文件

? ? ? ? ? ? if(!file.exists()){

? ? ? ? ? ? ? ? file.createNewFile();

? ? ? ? ? ? }

????????????// 第一行需要寫入bom(三個(gè)字節(jié),提示office為utf-8格式),否則Excel打開會(huì)多語言亂碼

? ? ? ? ? ? FileOutputStream out = null;

? ? ? ? ? ? try {

? ? ? ? ? ? ? ? out=new FileOutputStream(file);

? ? ? ? ? ? ? ? out.write(new byte[]{(byte) 0xEF, (byte) 0xBB, (byte) 0xBF});

? ? ? ? ? ? } catch (IOException e) {

? ? ? ? ? ? ? ? e.printStackTrace();

? ? ? ? ? ? } finally {

? ? ? ? ? ? ? ? if (out != null) {

? ? ? ? ? ? ? ? ? ? out.flush();

? ? ? ? ? ? ? ? ? ? out.close();

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

????????????CsvWriter csvWriter = null;

? ? ? ? ? ? try {

? ? ? ? ? ? ? ? //追加的方式,將數(shù)據(jù),寫入到 文件里面。

? ? ? ? ? ? ? ? csvWriter = CsvUtil.getWriter(file, Charset.forName("UTF-8"), true);

? ? ? ? ? ? ? ? if (!StringUtils.isEmpty(comment)) {

? ? ? ? ? ? ? ? ? ? csvWriter.writeComment(comment);

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? if (CollUtil.isNotEmpty(list)) {

? ? ? ? ? ? ? ? ? ? boolean isFirst = true;

? ? ? ? ? ? ? ? ? ? Map<String, Object> map;

? ? ? ? ? ? ? ? ? ? for (Object bean : list) {

? ? ? ? ? ? ? ? ? ? ? ? map = BeanUtil.beanToMap(bean);

? ? ? ? ? ? ? ? ? ? ? ? if (isFirst) {

? ? ? ? ? ? ? ? ? ? ? ? ? ? String titlesStr = InternationalizeUtil.get("MSG.Report.Export.Headers", locale);

? ? ? ? ? ? ? ? ? ? ? ? ? ? String[] titles = Arrays.asList(titlesStr.split(",")).toArray(new String[0]);

? ? ? ? ? ? ? ? ? ? ? ? ? ? csvWriter.writeHeaderLine(titles);

????????????????????????}

? ? ? ? ? ? ? ? }

? ? ? ? ? ? } catch (Exception e) {

? ? ? ? ? ? ? ? throw new RuntimeException(e);

? ? ? ? ? ? } finally {

? ? ? ? ? ? ? ? if (csvWriter != null) {

? ? ? ? ? ? ? ? ? ? try {

? ? ? ? ? ? ? ? ? ? ? ? csvWriter.flush();

? ? ? ? ? ? ? ? ? ? ? ? csvWriter.close();

? ? ? ? ? ? ? ? ? ? } catch (IORuntimeException e) {

? ? ? ? ? ? ? ? ? ? ? ? e.printStackTrace();

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

//下載文件

//? ? ? ? ? ? try {

//? ? ? ? ? ? ? ? downloadFileNew(response, file, fileNameStr + ".csv");

//? ? ? ? ? ? } catch (Exception e) {

//? ? ? ? ? ? ? ? throw new RuntimeException(e);

//? ? ? ? ? ? }? finally {

//? ? ? ? ? ? ? ? //將該文件刪除

////? ? ? ? ? ? ? ? file.delete();

//? ? ? ? ? ? }

? ? ? ? } catch (Exception e) {

? ? ? ? ? ? e.printStackTrace();

? ? ? ? ? ? throw new RuntimeException(e);

? ? ? ? }

? ? }

// 下載文件流

public static boolean downloadFile(HttpServletResponse response, File file, String filename) {

? ? ? ? FileInputStream fileInputStream = null;

? ? ? ? BufferedInputStream bufferedInputStream = null;

? ? ? ? OutputStream os = null;

? ? ? ? try {

? ? ? ? ? ? // 設(shè)置響應(yīng)頭,控制瀏覽器下載該文件, 傳文件名

? ? ? ? ? ? response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));

? ? ? ? ? ? fileInputStream = new FileInputStream(file);

? ? ? ? ? ? bufferedInputStream = new BufferedInputStream(fileInputStream);

? ? ? ? ? ? os = response.getOutputStream();

????????????//MS產(chǎn)本頭部需要插入BOM

? ? ? ? ? ? //如果不寫入這幾個(gè)字節(jié),會(huì)導(dǎo)致用Excel打開時(shí),中文顯示亂碼,windows下實(shí)踐發(fā)現(xiàn)寫兩次,記事本才能識別到bom

? ? ? ? ? ? os.write(new byte[]{(byte) 0xEF, (byte) 0xBB, (byte) 0xBF});

? ? ? ? ? ? byte[] buffer = new byte[1024];

? ? ? ? ? ? int i = bufferedInputStream.read(buffer);

? ? ? ? ? ? while (i != -1) {

? ? ? ? ? ? ? ? os.write(buffer, 0, i);

? ? ? ? ? ? ? ? i = bufferedInputStream.read(buffer);

? ? ? ? ? ? }

? ? ? ? ? ? return true;

? ? ? ? } catch (IOException e) {

? ? ? ? ? ? e.printStackTrace();

? ? ? ? } finally {

????????????//關(guān)閉流

? ? ? ? ? ? if (os != null) {

? ? ? ? ? ? ? ? try {

? ? ? ? ? ? ? ? ? ? os.flush();

? ? ? ? ? ? ? ? ? ? os.close();

? ? ? ? ? ? ? ? } catch (IOException e) {

? ? ? ? ? ? ? ? ? ? e.printStackTrace();

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? ? ? if (bufferedInputStream != null) {

? ? ? ? ? ? ? ? try {

? ? ? ? ? ? ? ? ? ? bufferedInputStream.close();

? ? ? ? ? ? ? ? } catch (IOException e) {

? ? ? ? ? ? ? ? ? ? e.printStackTrace();

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

????????if (fileInputStream != null) {

? ? ? ? ? ? ? ? try {

? ? ? ? ? ? ? ? ? ? fileInputStream.close();

? ? ? ? ? ? ? ? } catch (IOException e) {

? ? ? ? ? ? ? ? ? ? e.printStackTrace();

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? return false;

? ? }

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容