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

使用Java操作文本文件的方法详解

最初java是不支持对文本文件的处理的,为了弥补这个缺憾而引入了Reader和Writer两个类,这两个类都是抽象类,Writer中write(char[] ch,int off,int length),flush()和close()方法为抽象方法,Reader中read(char[] ch,int off,int length)和close()方法是抽象方法。子类应该分别实现他们。

  当我们读写文本文件的时候,采用Reader是非常方便的,比如FileReader,InputStreamReader和BufferedReader。其中最重要的类是InputStreamReader,它是字节转换为字符的桥梁。你可以在构造器重指定编码的方式,如果不指定的话将采用底层操作系统的默认编码方式,例如GBK等。当使用FileReader读取文件的时候。

FileReader fr = new FileReader("ming.txt");
int ch = 0;
while((ch = fr.read())!=-1 )
{
 System.out.print((char)ch);
}

  其中read()方法返回的是读取得下个字符。当然你也可以使用read(char[] ch,int off,int length)这和处理二进制文件的时候类似,不多说了。如果使用InputStreamReader来读取文件的时候

while((ch = isr.read())!=-1)
{
 System.out.print((char)ch);
}

  这和FileReader并没有什么区别,事实上在FileReader中的方法都是从InputStreamReader中继承过来的。read()方法是比较好费时间的,如果为了提高效率我们可以使用BufferedReader对Reader进行包装,这样可以提高读取得速度,我们可以一行一行的读取文本,使用readLine()方法。

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("ming.txt")));
String data = null;
while((data = br.readLine())!=null)
{
 System.out.println(data);
}

  当你明白了如何用Reader来读取文本文件的时候那么用Writer写文件同样非常简单。有一点需要注意,当你写文件的时候,为了提高效率,写入的数据会先放入缓冲区,然后写入文件。因此有时候你需要主动调用flush()方法。与上面对应的写文件的方法为:

FileWriter fw = new FileWriter("hello.txt");
String s = "hello world";
fw.write(s,0,s.length());
fw.flush();

OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("hello2.txt"));
osw.write(s,0,s.length());
osw.flush();

PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream("hello3.txt")),true);
pw.println(s);

  不要忘记用完后关闭流!下面是个小例子,帮助新手理解。其实有的时候java的IO系统是需要我们多记记的,不然哪天就生疏了。

  hello world i like java language

import java.io.*;

public class TestFile2
{
 public static void main(String[] args) throws IOException
 {
  FileReader fr = new FileReader("ming.txt");
  char[] buffer = new char[1024];
  int ch = 0;
  while((ch = fr.read())!=-1 )
  {
   System.out.print((char)ch);
  }

  InputStreamReader isr = new InputStreamReader(new FileInputStream("ming.txt"));
  while((ch = isr.read())!=-1)
  {
   System.out.print((char)ch);
  }

  BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("ming.txt")));
  String data = null;
  while((data = br.readLine())!=null)
  {
   System.out.println(data);
  }

  FileWriter fw = new FileWriter("hello.txt");
  String s = "hello world";
  fw.write(s,0,s.length());
  fw.flush();

  OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("hello2.txt"));
  osw.write(s,0,s.length());
  osw.flush();

  PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream("hello3.txt")),true);
  pw.println(s);

  fr.close();
  isr.close();
  br.close();
  fw.close();
  osw.close();
  pw.close();
 }
}

相关文章:

  • 随笔
  • Redis集群搭建与简单使用
  • 自动压缩MS SQL数据库日志
  • 五大绝招让你永远是人才
  • [转载]什么是IOC
  • 洛谷P3146 [USACO16OPEN]248
  • TechEd亲历图集
  • 秘制祖传正宗四川麻辣烫锅底配方
  • SqlPersistenceService数据库结构
  • 如何禁止内部viewPager滑动
  • ADO.NET 2.0 - 如何使用 DataView 来筛选数据
  • Sony DV的CCD也是有问题的
  • CakePHP中文手册【翻译】-请求处理组件
  • Itemplate自定义模板列
  • 委托的例子
  • hexo+github搭建个人博客
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • CSS魔法堂:Absolute Positioning就这个样
  • Git的一些常用操作
  • JDK 6和JDK 7中的substring()方法
  • js中的正则表达式入门
  • JWT究竟是什么呢?
  • mysql外键的使用
  • PHP 7 修改了什么呢 -- 2
  • Webpack 4 学习01(基础配置)
  • 第2章 网络文档
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 开发基于以太坊智能合约的DApp
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (LeetCode 49)Anagrams
  • (动态规划)5. 最长回文子串 java解决
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (附源码)计算机毕业设计ssm电影分享网站
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • ./configure,make,make install的作用(转)
  • .net framework profiles /.net framework 配置
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .Net Winform开发笔记(一)
  • /etc/fstab和/etc/mtab的区别
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成
  • [ Algorithm ] N次方算法 N Square 动态规划解决
  • [ C++ ] template 模板进阶 (特化,分离编译)
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [C#基础知识系列]专题十七:深入理解动态类型
  • [C++]AVL树怎么转
  • [C++]STL之map