利用IO流一次性读取文件中的所有内容,利用IO流下载文件
利用IO流一次性读取文件中的所有内容
读取文件效率最快的方法就是一次全读进来,使用readline()之类的方法,可能需要反复访问文件,而且每次readline()都会调用编码转换,降低了速度,所以,在已知编码的情况下,按字节流方式先将文件都读入内存,再一次性编码转换是最快的方式,代码如下:
try {File f = ResourceUtils.getFile(AndroidConst.JSON_FILE_PATH+AndroidConst.JSON_FILE_NAME);if(!f.exists()) {return Result.returnErrorResult("file "+AndroidConst.JSON_FILE_NAME+" not found ."); }Long filelength = f.length(); byte[] filecontent = new byte[filelength.intValue()]; FileInputStream in = new FileInputStream(f); in.read(filecontent); in.close(); String content=new String(filecontent);JSON json = JSONObject.parseObject(content, JSON.class);System.out.println(content); return Result.returnResult(json);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return Result.returnResult("error !");
将读取的文件内容直接转换成 json返回
利用IO流下载文件
同样是使用一次性全部读取的方式,将文件全部读取,并且放入缓存中,然后在写入response中直接返回
package com.huali.business.util;import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;import javax.servlet.http.HttpServletResponse;public class DownloadUtil {public static HttpServletResponse download(String path, HttpServletResponse response) {try {// path是指欲下载的文件的路径。File file = new File(path);// 取得文件名。String filename = file.getName();// 取得文件的后缀名。String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();// 以流的形式下载文件。InputStream fis = new BufferedInputStream(new FileInputStream(path));byte[] buffer = new byte[fis.available()];fis.read(buffer);fis.close();// 清空responseresponse.reset();// 设置response的Headerresponse.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes()));response.addHeader("Content-Length", "" + file.length());OutputStream toClient = new BufferedOutputStream(response.getOutputStream());response.setContentType("application/octet-stream");toClient.write(buffer);toClient.flush();toClient.close();} catch (IOException ex) {ex.printStackTrace();}return response;}}
以上是一个工具类,通过response=DownloadUtil.download(AndroidConst.APK_FILE_PATH+fileName, response);
直接调用即可!
利用IO流一次性读取文件中的所有内容,利用IO流下载文件相关推荐
- Python把PDF文件中每页内容分离为独立图片文件
封面图片:<Python程序设计实验指导书>(ISBN:9787302525790),董付国,清华大学出版社 图书详情(京东): ============== 问题描述:把PDF文件转换为 ...
- 在java中读取某个文件中的数据内容
代码 import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java ...
- 将 a.txt 文件中的单词与 b.txt 文件中的单词交替合并到 c.txt 文件 中
package again;import java.io.*;/* 1.编写一个程序,将 a.txt 文件中的单词与 b.txt 文件中的单词交替合并到 c.txt 文件 中,a.txt 文件中的单词 ...
- QFile修改替换文件中特定的内容
前言 一开始在做linux下的qt相关开发时,经常重复着灵活快速的修改文件中的某个内容,所以特此记录,下次直接复制粘贴代码. 思路是,先读取文件中的内容存在QString中,然后提取出我们要修改的那一 ...
- php遍历文本文档txt文件中的链接内容为数组
1 <?php 2 3 $file = fopen("1.txt", "r"); 4 $user=array(); 5 $i=0; 6 //输出文本中所有 ...
- 200826-C语言打印文件中的文本内容
1. Description 在桌面上创建一个txt文件,输入一些文本内容,我们的任务是把文本内容打印出来. 在编程之前,关于一些函数的定义我们需要了解下. fopen fopen的函数原型为: FI ...
- 根据条件从txt文件中挑出一些文字并据此修改文件名字
根据条件从txt文件中挑出一些文字并据此修改文件名字 /* ****************************************************** *学习Windows API编 ...
- linux文件删除指定内容,Linux bash删除文件中含“指定内容”的行功能示例
本文实例讲述了Linux bash删除文件中含"指定内容"的行功能.分享给大家供大家参考,具体如下: #!/bin/sh # 功能: 删除文件中含"指定内容"的 ...
- 【Linux】41. grep结合awk -F 获取文件中的关键内容
ip addr |grep inet |awk -F ' ' '{print $2}' 上面这句话就是:找出ip addr命令输出的内容中包含inet的所有行,并把这些行中用空格' '分隔的内容输出, ...
最新文章
- saiku 3.8 二次开发代码整理步骤(20160727更新)
- python 操作pdf
- Bayesian Neural Network for regression (PRML)
- 989-数组形式的整数加法
- ERP技术的新方向——智能客户端
- 快速pow和sqrt的小技巧 hdu4282
- 昇腾AI处理器软件栈--运行管理器(Runtime)
- POJ 2492 A Bug's Life (带权并查集 向量偏移)
- Oracle - 导入异常ORA-01659和11G在Exp时空表不能导出
- Android基础控件EditText
- 软件架构--《企业IT架构转型之道》笔记
- 彩灯控制器课程设计vhdl_EDA课程设计彩灯控制器
- c语言 步进电机 程序,步进电机加速启动C语言程序
- 计算机开机跳过硬盘检查,怎样取消电脑开机磁盘自检 关闭硬盘自检方法全析...
- 关于自编码器的核心点理解
- html页面 添加搜索关键词,如何为自己的网站添加关键字与描述详解
- UOS 安装腾讯会议的踩坑记录
- js-拖拽-div跟随鼠标的拖拽而移动
- 1024程序员节,带你解锁过节新方式
- 尼龙毛柱分离T细胞法操作指南
热门文章
- 小米的开源监控系统open-falcon架构设计,看完明白如何设计一个好的系统
- 带你了解CANN的目标检测与识别一站式方案
- ubuntu安装后的个人简单配置
- C语言编程>第十周 ⑧ 请编写函数fun,其功能是:将两个两位正整数x、y合并成一个整数放在z中。合并的方式是:将x的十位和个位依次放在z的十位和千位上,y十位和个位依次放在z的百位和个位上。
- 视觉画面风格种类有哪些呢?
- CORS 完全手册之 CORS 详解
- Arduino UNO R3上的AREF和IOREF管脚
- ubuntu下解决“无法获得锁 ”的方法
- 华为鸿蒙经济新闻,华为鸿蒙生态加速 市场相关板块再度活跃
- javascript存储对象