博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
别个代码阅读学习(一)
阅读量:5240 次
发布时间:2019-06-14

本文共 2964 字,大约阅读时间需要 9 分钟。

关于CommonsMultipartFile一点点

就是个关于文件操作的类,见识于对Excel文件导入时;

使用起来很方便,需要注意的是前后端的对接:

2.html写法注意两点

a.input类型为

file:

b.form中增加参数enctype="multipart/form-data":

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)

最后再给出引用的一篇博文:


由StringUtils.isNumeric引发的一些思考

首先,这个方法是检验某个字符串是不是数字类型,这样子后面转int等类型比较可靠;

然后,会想到去看下StringUtils这个类,平时也是常用其中几个方法的,但几乎是十中一二罢了;

然后,就会想到如何学习这种类呢?死记硬背么?肯定不行啊。

最后呢,根据两种思路进行了求证

  • 由下到上:见证某个方法的奇妙用法,看源码和用法,记录积累;
  • 由上到下:对某种数据类型有某种操作需求,思考相关要求,找相关类(工具类等),找其中的方法;

这样想了下,发现最终都是需要一个事情:多tm做事情,多tm看代码!

具体操作,综合两种思路:平时有操作需求,多思考下,然后如果成行,或者有不错的事例,记录下来;

最后,引用两个知乎答案:,


this和代码书写的艺术

this,这个常见,缺不是常懂。。经常就是照着已有代码比葫芦画瓢;

其实很简单,说白了就是当前对象

this的本质就是“创建好的对象的地址”! 由于在构造方法调用前,对象已经创建。因此,在构造方法中也可以使用this代表“当前对象” 。this最常的用法: 1.在程序中产生二义性之处,应使用this来指明当前对象;普通方法中,this总是指向调用该方法的对象。构造方法中,this总是指向正要初始化的对象。2.使用this关键字调用重载的构造方法,避免相同的初始化代码。但只能在构造方法中用,并且必须位于构造方法的第一句。3.this不能用于static方法中。

那么看下我这边说的代码书写艺术的体现吧

new MultiBatchJob
(this, MAX_BATCH_SIZE, list).batchStore().awaitFinish();

前面一部分都是实例化类,然后执行awaitFinish();

所以,艺术的部分在于构造函数的利用!

public MultiBatchJob(StorageImporter storageImporter, int batchCount, List
list) { } public MultiBatchJob batchStore() { return this; }

只看框架就知道,构造函数,然后执行操作,再需要执行操作呢?return this!!!我了个擦。。。

一般只在构造函数以及setter中用this的简直对此着迷!!!

无f可说,后面自己骚操作一下好么

转载于:https://www.cnblogs.com/andy1202go/p/8442424.html

你可能感兴趣的文章
k8s部署rocketmq 双主
查看>>
Linux SPI总线和设备驱动架构之四:SPI数据传输的队列化
查看>>
SIGPIPE并产生一个信号处理
查看>>
CentOS
查看>>
Explicit keyword
查看>>
Linux pipe函数
查看>>
java equals 小记
查看>>
Erdaicms旅游网站程序,微信扫码登录演示和示例程序
查看>>
15第十五章UDF用户自定义函数(转载)
查看>>
爬虫-通用代码框架
查看>>
2019春 软件工程实践 助教总结
查看>>
Remove '@Override' annotation错误
查看>>
YUV 格式的视频呈现
查看>>
开通了blog写一些技术blog及感悟
查看>>
Android弹出框的学习
查看>>
extjs gridpanel滚动条问题显示数据不完整
查看>>
springboot(四)设置Redis和Spring的整合
查看>>
mysql提示Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist解决方法...
查看>>
String字符串创建与存储机制
查看>>
现代程序设计 作业1
查看>>