当前位置: 首页 > news >正文

[转]java按指定编码写入和读取文件内容的类

读文件:

BufferedReader

从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。

可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。

通常,Reader 所作的每个读取请求都会导致对基础字符或字节流进行相应的读取请求。因此,建议用 BufferedReader 包装所有其 read() 操作可能开销很高的 Reader(如 FileReader 和 InputStreamReader)。例如,

 BufferedReader in
   = new BufferedReader(new FileReader("foo.in"));
 将缓冲指定文件的输入。如果没有缓冲,则每次调用 read() 或 readLine() 都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的。
可以对使用 DataInputStream 进行按原文输入的程序进行本地化,方法是用合适的 BufferedReader 替换每个 DataInputStream。

为了指定文件的编码方式,再进入如下修改:
//BufferedReader in = new BufferedReader(new FileReader(saveFilename));
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(saveFilename),"GB2312"));


写文件:

BufferedWriter

将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。

可以指定缓冲区的大小,或者接受默认的大小。在大多数情况下,默认值就足够大了。

该类提供了 newLine() 方法,它使用平台自己的行分隔符概念,此概念由系统属性 line.separator 定义。并非所有平台都使用新行符 ('\n') 来终止各行。因此调用此方法来终止每个输出行要优于直接写入新行符。

通常 Writer 将其输出立即发送到基础字符或字节流。除非要求提示输出,否则建议用 BufferedWriter 包装所有其 write() 操作可能开销很高的 Writer(如 FileWriters 和 OutputStreamWriters)。例如,

 PrintWriter out
   = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));
 将缓冲 PrintWriter 对文件的输出。如果没有缓冲,则每次调用 print() 方法会导致将字符转换为字节,然后立即写入到文件,而这是极其低效的。


为了指定文件的编码方式:
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(saveFilename),"GB2312")));

相关文章:

  • Android开发者应该深入学习的10个开源应用项目
  • centos7.3 docker升级
  • volatile和synchronized的区别
  • 全国省市数据库 access 版
  • CodeSmith模板引擎系列-目录
  • 分布式术语
  • SQL中truncate table和delete的区别
  • Ruby on Rails (ROR)类书籍下载地址及其他(整理)
  • sql server 2005卸载后重装显示sql server database services和工作站组件、联机丛书和开发工具安装失败...
  • xargs中的参数位置
  • 解读:大数据分析及其数据来源
  • general error c101008d: Failed to write the updated manifest to the resource of file
  • 容器如何访问外部世界?- 每天5分钟玩转 Docker 容器技术
  • 使用cookies实现浏览历史记录功能
  • 字符串类型内建方法归纳总结
  • HashMap ConcurrentHashMap
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • jquery cookie
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • leetcode-27. Remove Element
  • Python 基础起步 (十) 什么叫函数?
  • SAP云平台里Global Account和Sub Account的关系
  • scrapy学习之路4(itemloder的使用)
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • TCP拥塞控制
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 如何胜任知名企业的商业数据分析师?
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 7行Python代码的人脸识别
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • 回归生活:清理微信公众号
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • #if #elif #endif
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • #预处理和函数的对比以及条件编译
  • (poj1.2.1)1970(筛选法模拟)
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (力扣)1314.矩阵区域和
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转)菜鸟学数据库(三)——存储过程
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .libPaths()设置包加载目录
  • .net 4.0发布后不能正常显示图片问题
  • .net 7 上传文件踩坑
  • .NET Core 版本不支持的问题
  • .NET NPOI导出Excel详解
  • .NET Reactor简单使用教程
  • .Net Redis的秒杀Dome和异步执行
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)