1 public class FileUtil {
2
3
4 /**
5 * 读取文件内容,作为字符串返回
6 */
7 public static String readFileAsString(String filePath) throws IOException {
8 File file = new File(filePath);
9 if (!file.exists()) {
10 throw new FileNotFoundException(filePath);
11 }
12
13 if (file.length() > 1024 * 1024 * 1024) {
14 throw new IOException("File is too large");
15 }
16
17 StringBuilder sb = new StringBuilder((int) (file.length()));
18 // 创建字节输入流
19 FileInputStream fis = new FileInputStream(filePath);
20 // 创建一个长度为10240的Buffer
21 byte[] bbuf = new byte[10240];
22 // 用于保存实际读取的字节数
23 int hasRead = 0;
24 while ( (hasRead = fis.read(bbuf)) > 0 ) {
25 sb.append(new String(bbuf, 0, hasRead));
26 }
27 fis.close();
28 return sb.toString();
29 }
30
31 /**
32 * 根据文件路径读取byte[] 数组
33 */
34 public static byte[] readFileByBytes(String filePath) throws IOException {
35 File file = new File(filePath);
36 if (!file.exists()) {
37 throw new FileNotFoundException(filePath);
38 } else {
39 ByteArrayOutputStream bos = new ByteArrayOutputStream((int) file.length());
40 BufferedInputStream in = null;
41
42 try {
43 in = new BufferedInputStream(new FileInputStream(file));
44 short bufSize = 1024;
45 byte[] buffer = new byte[bufSize];
46 int len1;
47 while (-1 != (len1 = in.read(buffer, 0, bufSize))) {
48 bos.write(buffer, 0, len1);
49 }
50
51 byte[] var7 = bos.toByteArray();
52 return var7;
53 } finally {
54 try {
55 if (in != null) {
56 in.close();
57 }
58 } catch (IOException var14) {
59 var14.printStackTrace();
60 }
61
62 bos.close();
63 }
64 }
65 }
66
67 /*
68 * 通过流的方式上传文件
69 * @RequestParam("file") 将name=file控件得到的文件封装成CommonsMultipartFile 对象
70 * org.springframework.web.multipart.commons.CommonsMultipartFile(类)
71 * 中间会生成临时文件,会自动删除
72 * 效率NO.3
73 * 稍微大的文件超时,jq.js会报10254错误,前端显示404不过文件可以上传
74 * 需要在在dispatcher.xml里面配置试图解析器(<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">)
75 */
76
77 public static void fileUpload1(CommonsMultipartFile file) throws IOException {
78 // FileItem fff=file.getFileItem();
79 // System.out.println(fff.getName()+"<<<<getName()>>>>");
80 // System.out.println(fff.getFieldName()+"<<<<getFieldName()>>>>>"); ;
81 // System.out.println(fff.isFormField()+"<<<<isFormField()>>>>");
82 // //在这里面规定上传文件的类型
83 // System.out.println(fff.getContentType().endsWith(".doc")+"<<<<getContentType()>>>>");
84 // System.out.println(fff.isInMemory()+"<<<<isInMemory()>>>>");
85 // System.out.println(fff.getSize()+"<<<<getSize()>>>>");
86
87 //用来检测程序运行时间
88 long startTime=System.currentTimeMillis();
89 if(file.isEmpty()){
90 System.out.println("文件不存在(或大小为0)");
91 return;
92 }
93 String renamePath=FileUtil.renameFile(file.getOriginalFilename());
94 OutputStream os = null;
95 InputStream is = null;
96 try {
97 //获取输出流
98 os=new FileOutputStream(renamePath);
99 //获取输入流 CommonsMultipartFile 中可以直接得到文件的流
100 is=file.getInputStream();
101 int temp;
102 //一个一个字节的读取并写入
103 while((temp=is.read())!=(-1))
104 {
105 os.write(temp);
106 }
107
108
109 } catch (FileNotFoundException e) {
110 // TODO Auto-generated catch block
111 e.printStackTrace();
112 }finally{
113 os.flush();
114 os.close();
115 is.close();
116 }
117 long endTime=System.currentTimeMillis();
118 System.out.println("方法一的运行时间:"+String.valueOf(endTime-startTime)+"ms");
119 }
120
121
122 /*
123 * 采用file.Transto 来保存上传的文件【速度最快】
124 * org.springframework.web.multipart.commons.CommonsMultipartFile(类)
125 *中间会生成临时文件,会自动删除
126 * 效率NO.2
127 * 稍微大的文件超时,jq.js会报10254错误,前端显示404不过文件可以上传
128 * * 需要在在dispatcher.xml里面配置试图解析器(<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">)
129
130 */
131 public static void fileUpload2(CommonsMultipartFile file) throws IOException {
132 if(file.isEmpty()){
133 System.out.println("文件不存在");
134 return;
135 }
136 long startTime=System.currentTimeMillis();
137 String renameFilePath=FileUtil.renameFile(file.getOriginalFilename());
138 try{
139 File newFile=new File(renameFilePath);
140 //通过CommonsMultipartFile的方法直接写文件(注意这个时候)
141 file.transferTo(newFile);
142 }catch (Exception e){
143 System.out.println("方法2上传文件转换失败");
144 }
145
146 long endTime=System.currentTimeMillis();
147 System.out.println("方法二的运行时间:"+String.valueOf(endTime-startTime)+"ms");
148
149 }
150
151 /*推荐使用使用
152 *采用spring提供的上传文件的方法
153 * package org.springframework.web.multipart.commons.CommonsMultipartResolver;
154 * 需要在在dispatcher.xml里面配置试图解析器(<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">)
155 * 中间会生成临时文件,会自动删除
156 * 支持多文件上传
157 * 速度NO.1
158 */
159
160 public static void springUpload(HttpServletRequest request) throws IllegalStateException, IOException
161 {
162 long startTime=System.currentTimeMillis();
163 //将当前上下文初始化给 CommonsMutipartResolver (多部分解析器)
164 CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver(
165 request.getSession().getServletContext());
166 //检查form中是否有enctype="multipart/form-data"
167 if(multipartResolver.isMultipart(request))
168 {
169 //将request变成多部分request
170 MultipartHttpServletRequest multiRequest=(MultipartHttpServletRequest)request;
171 //获取multiRequest 中所有的文件名
172 Iterator iter=multiRequest.getFileNames();
173 // List<FileItem>
174 while(iter.hasNext())
175 {
176 //一次遍历所有文件
177 MultipartFile file=multiRequest.getFile(iter.next().toString());
178 if(file!=null)
179 {
180 String renamePath= FileUtil.renameFile(file.getOriginalFilename());
181 //上传
182 file.transferTo(new File(renamePath));
183 }
184
185 }
186
187 }
188 long endTime=System.currentTimeMillis();
189 System.out.println("方法三的运行时间:"+String.valueOf(endTime-startTime)+"ms");
190
191 }
192
193 /***基于
194 * commons-fileupload
195 *commons-io
196 *上传
197 *需要注销spring的上传文件解析器
198 * 因为protected MultipartParsingResult parseRequest(HttpServletRequest request) throws MultipartException {
199 * String encoding = this.determineEncoding(request);
200 * FileUpload fileUpload = this.prepareFileUpload(encoding);已经调用FileUpload进行解析封装为自己的对象MultipartParsingResult
201 * 再次List<FileItem> list = upload.parseRequest(request);解析时为空导致集合为空
202 * */
203 public static void fileUpload3(HttpServletRequest request, HttpServletResponse response){
204 //判断是不是post提交
205 boolean isMultipart =ServletFileUpload.isMultipartContent(request);
206 if (isMultipart == true) {
207 //初始化FiletItem工厂
208 FileItemFactory fif =new DiskFileItemFactory();
209 ServletFileUpload upload = new ServletFileUpload(fif);
210 upload.setHeaderEncoding("utf-8");
211 try {
212 //解析表单请求
213 List<FileItem> list = upload.parseRequest(request);
214 for (FileItem fi : list) {
215 //普通表单元素处理start
216 if (fi.isFormField()) {//判断是不是普通变淡属性
217 String fieldname = fi.getFieldName();
218 if (fieldname.equals("productNmae")) {
219 String projectName = null;
220 try {
221 projectName = fi.getString("utf-8");
222 } catch (UnsupportedEncodingException e) {
223 System.out.println("不支持utf-8编码");
224 }
225 System.out.println(projectName);
226 } else if (fieldname.equals("file")) {
227 try {
228 System.out.println(fi.getString("utf-8"));
229 } catch (UnsupportedEncodingException e) {
230 System.out.println("不支持utf-8编码");
231 }
232 ;
233 }
234 //普通表单元素处理end
235 } else {//是文件类型判断其大小,为0继续for循环
236 if (fi.getSize() == 0) {
237 continue;
238 }
239 String newFileName =FileUtil.renameFile(fi.getName());
240 try {
241 fi.write(new File(newFileName));
242 } catch (Exception e) {
243 e.printStackTrace();
244 }
245
246 }
247 }
248 } catch (FileUploadException e) {
249 e.printStackTrace();
250 }
251
252 }
253
254 }
255 /***
256 * 上传文件命名公共方法
257 * */
258 public static synchronized String renameFile(String originalFilename){
259 System.out.println("原文件名:"+originalFilename);
260 //桌面路径
261 String prefix = originalFilename.substring(originalFilename.lastIndexOf("."));
262 String newFileName =new Date().getTime()+ prefix;
263 String desktopPath= FileSystemView.getFileSystemView().getHomeDirectory().getAbsolutePath()+"\\"+newFileName;
264 System.out.println("新文件名:"+newFileName);
265 return desktopPath;
266
267 }
268
269 // <!-- 多部分文件上传 -->
270 //<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
271 // <property name="maxUploadSize" value="104857600" />
272 // <property name="maxInMemorySize" value="4096" />
273 // <property name="defaultEncoding" value="UTF-8"></property>
274 //</bean>
275 }

最新文章

  1. Win10 字体模糊解决(DPI缩放禁用),设置默认输入法英文
  2. Java NIO2:缓冲区
  3. jquery的promise实践--连续加载图片
  4. 为 Github 创造 Integration
  5. Oracle 与 entity framework 6 的配置,文档
  6. MSSQL 分组后取每组第一条(group by order by)
  7. opencl初探-sobel检测
  8. java笔记之变量的存储方式
  9. ASP.NET-FineUI开发实践-12
  10. Django的安装和一些操作
  11. enum &amp; json 之间的转换
  12. redis学习(二)——String数据类型
  13. Linux中查找当前目录下占用空间最大的前10个文件
  14. 9 tips to improve spoken english
  15. TypeScript设计模式之装饰、代理
  16. 用python实现MRO算法
  17. RadioButtonFor控件
  18. SQL server经验分享:SQLSERVER 被标记为“可疑”的数据库处理方法
  19. numpy数组广播
  20. html 1.0 鼠标放上去会亮 onmouseover onmouseout 以及this标签的使用

热门文章

  1. AT2304 Cleaning
  2. Linux上常用插件的一些命令
  3. 七个对我最重要的职业建议)--转载来自ruanyifeng博客
  4. odoo12学习之javascript
  5. 媒体应用视频超分AI神器!360P视频一键转换HD
  6. JS系统函数
  7. C++手写内存池
  8. Python的round()函数与数学的四舍五入的区别
  9. 洛谷P3052题解
  10. Android系统编程入门系列之服务Service齐头并进多线程任务