今天遇到有人问个问题:怎么将MultipartFile 转成file文件的?
很快有人便在群里回复了,如下:
InputStream src = null;
OutputStream dst = null;
File dstFile = new File("/filepath/filename");
try{
src = multipartFile.getInputStream();
dst = new FileOutputStream(dstFile);
IOUtils.copy(src, dst);
} finally {
IOUtils.closeQuietly(dst);
IOUtils.closeQuietly(src);
}
其实回答还不错,还使用了下IOUtils,而不是像下面(PS:真的不想酱紫写,好麻烦):
InputStream src = null;
OutputStream dst = null;
File dstFile = new File("/filepath/filename");
try{
src = multipartFile.getInputStream();
dst = new FileOutputStream(dstFile);
BufferedInputStream bufferedInputStream = new BufferedInputStream(src);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(dst);
int index=0;
byte[] buffer = new byte[4 * 1024];
while (-1 != (index = bufferedInputStream.read(buffer))) {
bufferedOutputStream.write(buffer, 0, index);
}
} finally {
//关闭流
}
代码量有了进一步提升,对于刚入门java的童鞋,流的操作一定要熟练,但是到了工作中,我觉得就不可取了,需要进一步提升效率来解放自己,在此案例中,其实有一种更简单的写法:
File dstFile = new File("/filepath/filename");
multipartFile.transferTo(dstFile);
你没看错,只有2行就把这个需求搞定了(以上代码都是在方法上throws异常,故没有异常处理)。所以以代码量来考查工作量其实是有根本性的问题的,它泯灭了开发中的一大乐趣——封装。
在我们日常生活中我们经常会遇到这样的情况:
- 你去找一个人要一个文件,找到一个大文件夹,然后一个文件夹一个文件夹的开始找,而有的人只是打开一个搜索框,输入几个关键字就找到了。
- 明明可以一个快捷键搞定的操作,一定要通过鼠标点好多下
- 明明有现成的工具,却一定要自己coding一个无二的出来,还不封装。
工具的出现为的就是解决我们效率问题,合理使用工具,了解工具能够让我们的日常更有效率,如何了解工具呢?
给大家一个建议:在拿到一个工具(第三方jar)时,先将其所有的功能(api)通读一遍。
但是效率并不是简单的用几个工具,多学点东西就能够提高的。要的是一种意识,一种愿意前期付出,后期收获的心态,如果说得更大些,就是放空心态,只有把自己完全放空,才能接受更多的新知识。