自己救贖之路--Java(Execl導入)

Execl導入和數據讀取

說一下,第一次用IDEA開發Springboot網站,做了一個execl的導入和execl的數據讀取,來跟大家分享一下遇到坑,又是如何解決的。

項目的創建

  • 第一步,首先創建新項目,上圖

這裏寫圖片描述

上圖就是用springboot創建好的項目和目錄結構,來上手操作吧!不會百度一大堆

  • 第二步,添加控制器,添加頁面,寫代碼

這裏寫圖片描述
貼上home類的代碼

package com.example.demo.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * Created by chenwangming on 2017/7/25.
 */
@Controller
@RequestMapping("/")
public class Home {

    @RequestMapping("/index")
    public String Index(){
        return "/index";
    }
    @RequestMapping("/import")
    public void execlImport()
    {
        System.out.print("lal");
    }
}

上圖是我在demo包下添加了一個controller包,在控制器包下創建了一個Home控制器類,以及Home類的相關代碼

  • 第三步,添加頁面,這裏我們使用的模板頁面

這裏寫圖片描述

頁面是創建在templates目錄下的,如上圖所示

現在,我們就來運行一下,看看效果如何

這裏寫圖片描述

結果發現了錯了,這頁面出來,所以我就找問題,在網上搜索,原來問題的所在是這樣的,有2中解決方法,作用都是一樣的。
第一種:在pom.xml 中引用
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

模板依賴

第二種:是在創建項目的時候勾選上模板,如圖所示
這裏寫圖片描述


問題解決了,來運行看一下效果:
這裏寫圖片描述

Execl的導入和讀取

因爲我之前是做.net 的,所以,我想原理可能是一樣的,都是通過form表單把file文件上傳到服務器,也就是後臺,再在後臺通過execl組件來讀取內容和處理內容。好了開始動手做了。

  • 第一步,在頁面添加form 表單 和file上傳控件,如下代碼所示
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>
    <title>Title</title>
    <script src="../../js/jquery-3.2.1.min.js"></script>
</head>
<body>
<div style="width: 100%;height: 50px;background-color: beige">

   <form id="form1" action="/import" method="post" enctype="multipart/form-data">
       <input type="file" id="files" name="files" style="display: none"/>
   </form>
    <button id="btnExecl" >導入execl</button>
</div>
</body>
</html>
<script type="text/javascript">
    $(function () {
        $("#btnExecl").click(function () {
           $("#files").click();
        })
        $("#files").change(function () {
            $("#form1").submit();
        })
    })();
</script>
  • 第二步,在後臺接受表單傳過來的文件,如下代碼所示
/**
     * execl文件導入
     */
    @RequestMapping("/import")
    public void execlImport   (HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
    {
        //得到上傳文件的保存目錄,將上傳的文件存放於WEB-INF目錄下,不允許外界直接訪問,保證上傳文件的安全
        //String savePath = this.getServletContext().getRealPath("/WEB-INF/upload");
        //上傳時生成的臨時文件保存目錄
        //String tempPath = this.getServletContext().getRealPath("/WEB-INF/temp");
        String savePath = "D:\\fileupload\\upload";
        File tmpFile = new File(savePath);
        if (!tmpFile.exists()) {
            //創建臨時目錄
            tmpFile.mkdir();
        }
        //消息提示
        String message = "";
        try {
            //使用Apache文件上傳組件處理文件上傳步驟:
            //1、創建一個DiskFileItemFactory工廠
            DiskFileItemFactory factory = new DiskFileItemFactory();
            //設置工廠的緩衝區的大小,當上傳的文件大小超過緩衝區的大小時,就會生成一個臨時文件存放到指定的臨時目錄當中。
            factory.setSizeThreshold(1024 * 100);//設置緩衝區的大小爲100KB,如果不指定,那麼緩衝區的大小默認是10KB
            //設置上傳時生成的臨時文件的保存目錄
            factory.setRepository(tmpFile);
            //2、創建一個文件上傳解析器
            ServletFileUpload upload = new ServletFileUpload(factory);
            //監聽文件上傳進度
            upload.setProgressListener(new ProgressListener() {

                public void update(long pBytesRead, long pContentLength, int arg2) {
                    System.out.println("文件大小爲:" + pContentLength + ",當前已處理:" + pBytesRead);
                    /**
                     * 文件大小爲:14608,當前已處理:4096
                     文件大小爲:14608,當前已處理:7367
                     文件大小爲:14608,當前已處理:11419
                     文件大小爲:14608,當前已處理:14608
                     */
                }

            });
            //解決上傳文件名的中文亂碼
            upload.setHeaderEncoding("UTF-8");
            //3、判斷提交上來的數據是否是上傳表單的數據
            if (!ServletFileUpload.isMultipartContent(request)) {
                //按照傳統方式獲取數據
                return;
            }

            //設置上傳單個文件的大小的最大值,目前是設置爲1024*1024字節,也就是1MB
            upload.setFileSizeMax(1024 * 1024);
            //設置上傳文件總量的最大值,最大值=同時上傳的多個文件的大小的最大值的和,目前設置爲10MB
            upload.setSizeMax(1024 * 1024 * 10);
            //4、使用ServletFileUpload解析器解析上傳數據,解析結果返回的是一個List<FileItem>集合,每一個FileItem對應一個Form表單的輸入項


            List<FileItem> list = upload.parseRequest(request);
            for (FileItem item : list) {
                //如果fileitem中封裝的是普通輸入項的數據
                if (item.isFormField()) {
                    String name = item.getFieldName();
                    //解決普通輸入項的數據的中文亂碼問題
                    String value = item.getString("UTF-8");
                    //value = new String(value.getBytes("iso8859-1"),"UTF-8");
                    System.out.println(name + "=" + value);
                } else {//如果fileitem中封裝的是上傳文件
                    //得到上傳的文件名稱,
                    String filename = item.getName();
                    System.out.println(filename);
                    if (filename == null || filename.trim().equals("")) {

                        continue;

                    }

                    //注意:不同的瀏覽器提交的文件名是不一樣的,有些瀏覽器提交上來的文件名是帶有路徑的,如:  c:\a\b\1.txt,而有些只是單純的文件名,如:1.txt

                    //處理獲取到的上傳文件的文件名的路徑部分,只保留文件名部分

                    filename = filename.substring(filename.lastIndexOf("\\") + 1);

                    //得到上傳文件的擴展名

                    String fileExtName = filename.substring(filename.lastIndexOf(".") + 1);

                    //如果需要限制上傳的文件類型,那麼可以通過文件的擴展名來判斷上傳的文件類型是否合法

                    System.out.println("上傳的文件的擴展名是:" + fileExtName);

                    //獲取item中的上傳文件的輸入流
                    InputStream in = item.getInputStream();
                    //得到文件保存的名稱
                    String saveFilename = makeFileName(filename);
                    //得到文件的保存目錄
                    String realSavePath = makePath(saveFilename, savePath);
                    //創建一個文件輸出流
                    FileOutputStream out = new FileOutputStream(realSavePath + "\\" + saveFilename);
                    //創建一個緩衝區
                    byte buffer[] = new byte[1024];
                    //判斷輸入流中的數據是否已經讀完的標識
                    int len = 0;
                    //循環將輸入流讀入到緩衝區當中,(len=in.read(buffer))>0就表示in裏面還有數據
                    while ((len = in.read(buffer)) > 0) {
                        //使用FileOutputStream輸出流將緩衝區的數據寫入到指定的目錄(savePath + "\\" + filename)當中
                        out.write(buffer, 0, len);
                    }
                    //關閉輸入流
                    in.close();
                    //關閉輸出流
                    out.close();
                    //刪除處理文件上傳時生成的臨時文
                    //item.delete();
                    message = "文件上傳成功!";
                }
            }
        }catch (FileUploadBase.FileSizeLimitExceededException e) {
            e.printStackTrace();
            //request.setAttribute("message", "單個文件超出最大值!!!");
            //request.getRequestDispatcher("/message.jsp").forward(request, response);
            return;
        }catch (FileUploadBase.SizeLimitExceededException e) {
            e.printStackTrace();
            //request.setAttribute("message", "上傳文件的總的大小超出限制的最大值!!!");
            //request.getRequestDispatcher("/message.jsp").forward(request, response);
            return;
        }catch (Exception e) {
            message = "文件上傳失敗!";
            e.printStackTrace();
        }
        request.setAttribute("message",message);
        //request.getRequestDispatcher("/message.jsp").forward(request, response);
    }
    /**
     * @Method: makeFileName
     * @Description: 生成上傳文件的文件名,文件名以:uuid+"_"+文件的原始名稱
     * @Anthor:孤傲蒼狼
     * @param filename 文件的原始名稱
     * @return uuid+"_"+文件的原始名稱
     */
    private String makeFileName(String filename) {  //2.jpg
        //爲防止文件覆蓋的現象發生,要爲上傳文件產生一個唯一的文件名
        return UUID.randomUUID().toString() + "_" + filename;
    }

    /**
     * 爲防止一個目錄下面出現太多文件,要使用hash算法打散存儲
     * @Method: makePath
     * @Description:
     * @Anthor:孤傲蒼狼
     *
     * @param filename 文件名,要根據文件名生成存儲目錄
     * @param savePath 文件存儲路徑
     * @return 新的存儲目錄
     */
    private String makePath(String filename,String savePath){
        //得到文件名的hashCode的值,得到的就是filename這個字符串對象在內存中的地址
        int hashcode = filename.hashCode();
        int dir1 = hashcode&0xf;  //0--15
        int dir2 = (hashcode&0xf0)>>4;  //0-15
        //構造新的保存目錄
        String dir = savePath + "\\" + dir1 + "\\" + dir2;  //upload\2\3  upload\3\5
        //File既可以代表文件也可以代表目錄
        File file = new File(dir);
        //如果目錄不存在
        if(!file.exists()){
            //創建目錄
            file.mkdirs();
        }
        return dir;
    }

說句實話,雖然我懂.net的代碼,但是畢竟Java做的少,我想肯定有寫好的完整的代碼示例,於是就在網上找了個不錯的代碼貼過來改改,上面的代碼就是貼過的,原文鏈接:http://www.cnblogs.com/xdp-gacl/p/4200090.html ,不過我發現是有問題的,來給大家剖析一下問題。

經過調試,發現沒有獲取到文件,如下圖

這裏寫圖片描述

看來有些代碼也是不靠譜的,還是要自己解決,就在網上各種搜索問題,總結如下:
我是在SpringBoot下測試時,發現的該問題,即在解析請求時List list = upload.parseRequest(request);得到的list size=0,也就是根本沒有得到文件數據。我在網上搜索該問題的解決方法,大致有以下兩種:

(1)原因在於spring的配置文件中已經配置了MultipartResolver,導致文件上傳請求已經被預處理過了,所以此處解析文件列表爲空,對應的做法是刪除該段配置。
(2)認爲是structs的過濾器導致請求已被預處理,所以也要修改對應過濾器的配置。
然而,在SpringBoot下,上述兩種解決方法不可能做到,因爲SpringBoot的相關配置都是自己完成的,根本沒有顯示的配置文件。況且以上兩種解決方法,修改配置文件可能影響整個工程的其他部分,所以得另尋方案。

對了給大家貼上原文地址:http://blog.csdn.net/u013248535/article/details/55823364

  • 第三步,只能修改後臺代碼了,來看修改後的代碼
 /**
     * execl文件導入
     */
    @RequestMapping("/import")
    public void execlImport   (HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
    {
        //保存文件路徑
        String savePath = "D:\\fileupload\\upload";
        String message="";
        String realSavePath="";
        String saveFilename="";
        //強制轉換request
        StandardMultipartHttpServletRequest req = (StandardMultipartHttpServletRequest) request;
        try {
            Iterator<String> iterator = req.getFileNames();
            while (iterator.hasNext()) {
                MultipartFile file = req.getFile(iterator.next());
                String fileNames = file.getOriginalFilename();
                int split = fileNames.lastIndexOf(".");
                //文件名 String substring = fileNames.substring(0, split);
                //文件格式 String substring1 = fileNames.substring(split + 1, fileNames.length());
                //文件內容 byte[] bytes = file.getBytes();
                //存儲文件

                //文件大小
                long size = file.getSize();
                //文件擴展名
                String extension = fileNames.substring(split + 1, fileNames.length());

                //獲取item中的上傳文件的輸入流
                InputStream in = file.getInputStream();
                //得到文件保存的名稱
                saveFilename = makeFileName(fileNames);
                //得到文件的保存目錄
                realSavePath = makePath(saveFilename, savePath);
                //創建一個文件輸出流
                FileOutputStream out = new FileOutputStream(realSavePath + "\\" + saveFilename);
                //創建一個緩衝區
                byte buffer[] = new byte[1024];
                //判斷輸入流中的數據是否已經讀完的標識
                int len = 0;
                //循環將輸入流讀入到緩衝區當中,(len=in.read(buffer))>0就表示in裏面還有數據
                while ((len = in.read(buffer)) > 0) {
                    //使用FileOutputStream輸出流將緩衝區的數據寫入到指定的目錄(savePath + "\\" + filename)當中
                    out.write(buffer, 0, len);
                }
                //關閉輸入流
                in.close();
                //關閉輸出流
                out.close();
                message="上傳成功!";
            }
        } catch (IOException e) {
            message="上傳失敗!";
            e.printStackTrace();
        }
        request.setAttribute("message",message);
        //request.getRequestDispatcher("/message.jsp").forward(request, response);
    }
    /**
     * @Method: makeFileName
     * @Description: 生成上傳文件的文件名,文件名以:uuid+"_"+文件的原始名稱
     * @Anthor:孤傲蒼狼
     * @param filename 文件的原始名稱
     * @return uuid+"_"+文件的原始名稱
     */
    private String makeFileName(String filename) {  //2.jpg
        //爲防止文件覆蓋的現象發生,要爲上傳文件產生一個唯一的文件名
        return UUID.randomUUID().toString() + "_" + filename;
    }

    /**
     * 爲防止一個目錄下面出現太多文件,要使用hash算法打散存儲
     * @Method: makePath
     * @Description:
     * @Anthor:孤傲蒼狼
     *
     * @param filename 文件名,要根據文件名生成存儲目錄
     * @param savePath 文件存儲路徑
     * @return 新的存儲目錄
     */
    private String makePath(String filename,String savePath){
        //得到文件名的hashCode的值,得到的就是filename這個字符串對象在內存中的地址
        int hashcode = filename.hashCode();
        int dir1 = hashcode&0xf;  //0--15
        int dir2 = (hashcode&0xf0)>>4;  //0-15
        //構造新的保存目錄
        String dir = savePath + "\\" + dir1 + "\\" + dir2;  //upload\2\3  upload\3\5
        //File既可以代表文件也可以代表目錄
        File file = new File(dir);
        //如果目錄不存在
        if(!file.exists()){
            //創建目錄
            file.mkdirs();
        }
        return dir;
    }

我對Java的好多類庫不是很熟,不能像.net 一樣知道的那麼多,所有就一遍查閱資料,一邊調試的看效果,不過這可以上傳文件了

  • 第四步,上傳本地文件到服務器,來看效果圖

這裏寫圖片描述

這裏寫圖片描述

這是上傳圖片成功後的截圖。

  • 第五步,讀取execl數據,貼代碼
 /**
     * 解析execl文件
     * @param path
     */
    private void analysisExecl(String path) throws IOException, ParseException {

        ImportExeclHelper poi =new ImportExeclHelper();

        List<List<String>> list=poi.read(path);
        List<Users> uselist=new ArrayList<Users>();
        if (list != null)
        {
            for (int i = 0; i < list.size(); i++)
            {

                System.out.print("第" + (i) + "行");
                if(i>1)
                {
                    Users u=new Users();
                    List<String> cellList = list.get(i);

//                    for (int j = 0; j < cellList.size(); j++)
//                    {
                        u.setAddress(cellList.get(4));
                        u.setAge((int)(Double.parseDouble(cellList.get(2))));
//                        String timedata=cellList.get(5);
                        SimpleDateFormat sdf =  new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy",Locale.UK);
                       // SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");

                        Date date = sdf.parse(cellList.get(5));
                    //String format1 = format.format(date);
                        u.setCreatetime(date);
                        u.setLight(Double.parseDouble(cellList.get(3)));
                        u.setPostil(cellList.get(0));
                        u.setUsername(cellList.get(1));
//                        System.out.print("    第" + (j + 1) + "列值:");
//                        System.out.print("    " + cellList.get(j));
//                    }
                   uselist.add(u);
                }




                System.out.println(uselist);

            }
        }

    }
package com.hma.controllers;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * Created by chenwangming on 2017/7/24.
 */
public class ImportExeclHelper {
    /** 總行數 */

    private int totalRows = 0;

    /** 總列數 */

    private int totalCells = 0;

    /** 錯誤信息 */

    private String errorInfo;

    /** 構造方法 */

    public ImportExeclHelper()
    {

    }

    /**
     *
     * @描述:得到總行數
     * @參數:@return
     * @返回值:int
     */

    public int getTotalRows()
    {

        return totalRows;

    }

    /**
     *
     * @描述:得到總列數
     * @參數:@return
     * @返回值:int
     */

    public int getTotalCells()
    {

        return totalCells;

    }

    /**
     *
     * @描述:得到錯誤信息
     * @參數:@return
     * @返回值:String
     */

    public String getErrorInfo()
    {

        return errorInfo;

    }

    /**
     *
     * @描述:驗證excel文件
     * @參數:@param filePath 文件完整路徑
     * @參數:@return
     * @返回值:boolean
     */

    public boolean validateExcel(String filePath)
    {

        /** 檢查文件名是否爲空或者是否是Excel格式的文件 */

        if (filePath == null || !(WDWUtil.isExcel2003(filePath) || WDWUtil.isExcel2007(filePath)))
        {

            errorInfo = "文件名不是excel格式";

            return false;

        }

        /** 檢查文件是否存在 */

        File file = new File(filePath);

        if (file == null || !file.exists())
        {

            errorInfo = "文件不存在";

            return false;

        }

        return true;

    }

    /**
     *
     * @描述:根據文件名讀取excel文件
     * @參數:@param filePath 文件完整路徑
     * @參數:@return
     * @返回值:List
     */

    public List<List<String>> read(String filePath)
    {

        List<List<String>> dataLst = new ArrayList<List<String>>();

        InputStream is = null;

        try
        {

            /** 驗證文件是否合法 */

            if (!validateExcel(filePath))
            {

                System.out.println(errorInfo);

                return null;

            }

            /** 判斷文件的類型,是2003還是2007 */

            boolean isExcel2003 = true;

            if (WDWUtil.isExcel2007(filePath))
            {

                isExcel2003 = false;

            }

            /** 調用本類提供的根據流讀取的方法 */

            File file = new File(filePath);

            is = new FileInputStream(file);

            dataLst = read(is, isExcel2003);

            is.close();

        }
        catch (Exception ex)
        {

            ex.printStackTrace();

        }
        finally
        {

            if (is != null)
            {

                try
                {

                    is.close();

                }
                catch (IOException e)
                {

                    is = null;

                    e.printStackTrace();

                }

            }

        }

        /** 返回最後讀取的結果 */

        return dataLst;

    }

    /**
     *
     * @描述:根據流讀取Excel文件
     * @參數:@param inputStream
     * @參數:@param isExcel2003
     * @參數:@return
     * @返回值:List
     */

    public List<List<String>> read(InputStream inputStream, boolean isExcel2003) throws IOException {

        List<List<String>> dataLst = null;

        try
        {

            /** 根據版本選擇創建Workbook的方式 */

            Workbook wb = null;

            if (isExcel2003)
            {
                wb = new HSSFWorkbook(inputStream);
            }
            else
            {
                wb = new XSSFWorkbook(inputStream);
            }
            dataLst = read(wb);

        }
        catch (IOException e)
        {

            e.printStackTrace();

        }

        return dataLst;

    }

    /**
     *
     * @描述:讀取數據
     * @參數:@param Workbook
     * @參數:@return
     * @返回值:List<List<String>>
     */

    private List<List<String>> read(Workbook wb)
    {

        List<List<String>> dataLst = new ArrayList<List<String>>();

        /** 得到第一個shell */

        Sheet sheet = wb.getSheetAt(0);

        /** 得到Excel的行數 */

        this.totalRows = sheet.getPhysicalNumberOfRows();

        /** 得到Excel的列數 */

        if (this.totalRows >= 1 && sheet.getRow(0) != null)
        {

            this.totalCells = sheet.getRow(0).getPhysicalNumberOfCells();

        }

        /** 循環Excel的行 */

        for (int r = 0; r < this.totalRows; r++)
        {

            Row row = sheet.getRow(r);

            if (row == null)
            {

                continue;

            }

            List<String> rowLst = new ArrayList<String>();

            /** 循環Excel的列 */

            for (int c = 0; c < this.getTotalCells(); c++)
            {

                Cell cell = row.getCell(c);
                if(cell.getCellComment()!=null)
                {
                    rowLst.add(cell.getCellComment().getString().toString());
                }
                String cellValue = "";

                if (null != cell)
                {
                    // 以下是判斷數據的類型
                    switch (cell.getCellType())
                    {
                        case HSSFCell.CELL_TYPE_NUMERIC: // 數字

                           if (HSSFDateUtil.isCellDateFormatted(cell))
                           {
                               Date date = cell.getDateCellValue() ;
                               cellValue=date.toString();
                           }else{
                               cellValue = cell.getNumericCellValue() + "";
                           }

                            //cellValue= cell.getDateCellValue();
                            break;

                        case HSSFCell.CELL_TYPE_STRING: // 字符串
                            cellValue = cell.getStringCellValue();
                            break;

                        case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean
                            cellValue = cell.getBooleanCellValue() + "";
                            break;

                        case HSSFCell.CELL_TYPE_FORMULA: // 公式
                            cellValue = cell.getCellFormula() + "";
                            break;

                        case HSSFCell.CELL_TYPE_BLANK: // 空值
                            cellValue = "";
                            break;

                        case HSSFCell.CELL_TYPE_ERROR: // 故障
                            cellValue = "非法字符";
                            break;

                        default:
                            cellValue = "未知類型";
                            break;
                    }
                }

                rowLst.add(cellValue);

            }

            /** 保存第r行的第c列 */

            dataLst.add(rowLst);

        }

        return dataLst;

    }
}

/**
 *
 * @描述:工具類
 */

class WDWUtil
{

    /**
     *
     * @描述:是否是2003的excel,返回true是2003
     * @參數:@param filePath 文件完整路徑
     * @參數:@return
     * @返回值:boolean
     */

    public static boolean isExcel2003(String filePath)
    {

        return filePath.matches("^.+\\.(?i)(xls)$");

    }

    /**
     *
     * @描述:是否是2007的excel,返回true是2007
     * @參數:@param filePath 文件完整路徑
     * @參數:@return
     * @返回值:boolean
     */

    public static boolean isExcel2007(String filePath)
    {

        return filePath.matches("^.+\\.(?i)(xlsx)$");

    }
}

這個是讀取execl方法,然後轉化成Users類 ,打印出來。 不過這裏面還有個ImportExeclHelper 幫助類,我也給貼出來了,如上代碼所示。

說一下,讀取execl 遇到的問題吧!

1 . word中的日期讀取出來是42900.0格式的,也不是時間戳,所以嘗試了很多種方法不沒有搞定,後來加了

       if (HSSFDateUtil.isCellDateFormatted(cell))
                           {
                               Date date = cell.getDateCellValue() ;
                               cellValue=date.toString();
                           }else{
                               cellValue = cell.getNumericCellValue() + "";
                           }

這判斷後才勉強轉化成日期格式,這段在代碼中有,希望大家有更好建議。

2 . 我對java的日期轉換是一頭霧水,跟.net的真心不一樣,百度了好多次,才轉換成功,如下代碼

 SimpleDateFormat sdf =  new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy",Locale.UK);
 Date date = sdf.parse(cellList.get(5));

好了,今天的內容就寫到這裏了,很感謝那些遇到問題分享給大家的人,才讓我們提高解決問題的效率,從我做起,一起發現問題,解決問題,感謝大家多多支持,再次感謝兩位原文鏈接的博主,讓我一個沒有做過Java的人很容易的實現我想要的功能!


技術交流羣:210470210

發佈了42 篇原創文章 · 獲贊 15 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章