別個代碼閱讀學習(一)
關於CommonsMultipartFile一點點
就是個關於文件操作的類,見識於對Excel文件導入時;
使用起來很方便,需要註意的是前後端的對接:
2.html寫法註意兩點
a.input類型為file:<input type="file" name="sealPfxFile" id="sealPfxFile" size="24" />
b.form中增加參數enctype="multipart/form-data":
<form id="addSeal" name="addSeal" action="${root}/seal/o_add.do" enctype="multipart/form-data" method="post">
3.Service的寫法(註意與html中定義的名稱相同即可通過get方法取得需要的內容)
public String doAction(@RequestParam("sealPfxFile") CommonsMultipartFile sealPfxFile, Seal seal, ModelMap modelMap, HttpServletRequest request) throws Exception { //上傳文件名 String fileName = sealPfxFile.getFileItem().getName(); //上傳文件流 InputStream is = sealPfxFile.getInputStream(); }
之後是數據的應用,這裏用的是HSSFWorkbook類進行的加載,比較關鍵的代碼如下:
{ Workbook wb = loadWorkbook(inputStream); Sheet current = wb.getSheetAt(0); int lastRowNum = current.getLastRowNum(); for (int i = 0; i <= lastRowNum; i++) { if(i == 0) continue;//title Row row = this.getRow(current, i); if(row == null){ return result; } int numOfCells = row.getPhysicalNumberOfCells(); if (numOfCells < minCount) { LOG.error("數據錯誤,行數:{}, 數據:{}", i, StringUtil.join(row.cellIterator(), ",")); continue; } String answer = getCellValue(row, categoryCount); } ········ protected Workbook loadWorkbook(InputStream inputStream) throws IOException { return new HSSFWorkbook(inputStream); } public String getCellValue(Row row, int column) { String val = null; try { Cell cell = row.getCell(column); val = getString(getCellValue(cell)); } catch (Exception e) { //ignore } return val; }
總結一下:load(InputStream)——》sheet——》row——》cell;
其中又有一些細節,比如load的時候單獨拆出來的方法(每個方法關註的重點不同,去耦合,同時也有Exception的考慮!),比如重復性代碼的拆分(getCellValue)
最後再給出引用的一篇博文:CommonsMultipartFile---用Spring實現文件上傳
由StringUtils.isNumeric引發的一些思考
首先,這個方法是檢驗某個字符串是不是數字類型,這樣子後面轉int等類型比較可靠;
然後,會想到去看下StringUtils這個類,平時也是常用其中幾個方法的,但幾乎是十中一二罷了;
然後,就會想到如何學習這種類呢?死記硬背麽?肯定不行啊。
最後呢,根據兩種思路進行了求證
- 由下到上:見證某個方法的奇妙用法,看源碼和用法,記錄積累;
- 由上到下:對某種數據類型有某種操作需求,思考相關要求,找相關類(工具類等),找其中的方法;
這樣想了下,發現最終都是需要一個事情:多tm做事情,多tm看代碼!
具體操作,綜合兩種思路:平時有操作需求,多思考下,然後如果成行,或者有不錯的事例,記錄下來;
最後,引用兩個知乎答案:如何高效學習Java API提供的的類和方法?,Java開發人員必知必會的20種常用類庫和API
this和代碼書寫的藝術
this,這個常見,缺不是常懂。。經常就是照著已有代碼比葫蘆畫瓢;
其實很簡單,說白了就是當前對象
this的本質就是“創建好的對象的地址”! 由於在構造方法調用前,對象已經創建。因此,在構造方法中也可以使用this代表“當前對象” 。this最常的用法: 1.在程序中產生二義性之處,應使用this來指明當前對象;普通方法中,this總是指向調用該方法的對象。構造方法中,this總是指向正要初始化的對象。2.使用this關鍵字調用重載的構造方法,避免相同的初始化代碼。但只能在構造方法中用,並且必須位於構造方法的第一句。3.this不能用於static方法中。
那麽看下我這邊說的代碼書寫藝術的體現吧
new MultiBatchJob<E>(this, MAX_BATCH_SIZE, list).batchStore().awaitFinish();
前面一部分都是實例化類,然後執行awaitFinish();
所以,藝術的部分在於構造函數的利用!
public MultiBatchJob(StorageImporter storageImporter, int batchCount, List<E> list) {
}
public MultiBatchJob batchStore() {
return this;
}
只看框架就知道,構造函數,然後執行操作,再需要執行操作呢?return this!!!我了個擦。。。
一般只在構造函數以及setter中用this的簡直對此著迷!!!
無f可說,後面自己騷操作一下好麽
別個代碼閱讀學習(一)