文档章节

java文件的读写

猴亮屏
 猴亮屏
发布于 2014/06/04 16:32
字数 1110
阅读 81
收藏 9
点赞 0
评论 0
/**
 * 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。 
 */ 
public class ReadFromFile { 
    public static void readFileByBytes(String fileName) {
    File file = new File(fileName);
    InputStream in = null;
    try {
        System.out.println("以字节为单位读取文件内容,一次读一个字节:"); // 一次读一个字节
        in = new FileInputStream(file);
        int tempbyte;
        while ((tempbyte = in.read()) != -1) {
            System.out.print(tempbyte);
        }
        in.close();
    } catch (IOException e) {
        e.printStackTrace(); 
        return; 
    } 
    try { 
        System.out.println("以字节为单位读取文件内容,一次读多个字节:"); // 一次读多个字节
        byte[] tempbytes = new byte[100]; 
        int byteread = 0; 
        in = new FileInputStream(fileName); 
        ReadFromFile.showAvailableBytes(in); // 读入多个字节到字节数组中,byteread为一次读入的字节数 
        while ((byteread = in.read(tempbytes)) != -1) { 
            System.out.print(tempbytes, 0, byteread); 
        } 
    } catch (Exception e1) { 
        e1.printStackTrace(); 
    } finally { 
        if (in != null) { 
            try { 
                in.close(); 
            } catch (IOException e1) { 
            } 
        } 
    } 
}
/**
   * 以字符为单位读取文件,常用于读文本,数字等类型的文件
   */
  public static void readFileByChars(String fileName) {
      File file = new File(fileName);
      Reader reader = null;
      try {
          System.out.println("以字符为单位读取文件内容,一次读一个字符:");
          // 一次读一个字符
          reader = new InputStreamReader(new FileInputStream(file));
          int tempchar;
          while ((tempchar = reader.read()) != -1) {
              // 对于windows下,\r\n这两个字符在一起时,表示一个换行。
              // 但如果这两个字符分开显示时,会换两次行。
              // 因此,屏蔽掉\r,或者屏蔽\n。否则,将会多出很多空行。
              if (((char) tempchar) != '\r') {
                  System.out.print((char) tempchar);
              }
          }
          reader.close();
      } catch (Exception e) {
          e.printStackTrace();
      }
      try {
          System.out.println("以字符为单位读取文件内容,一次读多个字符:");
          // 一次读多个字符
          char[] tempchars = new char[30];
          int charread = 0;
          //由于要以字符来读取,所以需要套上字符流
          reader = new InputStreamReader(new FileInputStream(fileName));
          // 读入多个字符到字符数组中,charread为一次读取字符数
          while ((charread = reader.read(tempchars)) != -1) {
              // 同样屏蔽掉\r不显示
              if ((charread == tempchars.length)
                      && (tempchars[tempchars.length - 1] != '\r')) {
                  System.out.print(tempchars);
              } else {
                  for (int i = 0; i < charread; i++) {
                      if (tempchars[i] == '\r') {
                          continue;
                      } else {
                          System.out.print(tempchars[i]);
                      }
                  }
              }
          }
 
      } catch (Exception e1) {
          e1.printStackTrace();
      } finally {
          if (reader != null) {
              try {
                  reader.close();
              } catch (IOException e1) {
                  e.printerror();
              }
          }
      }
  }
/**
   * 以行为单位读取文件,常用于读面向行的格式化文件
   */
  public static void readFileByLines(String fileName) {
      File file = new File(fileName);
      BufferedReader reader = null;
      try {
          System.out.println("以行为单位读取文件内容,一次读一整行:");
          reader = new BufferedReader(new FileReader(file));
          String tempString = null;
          int line = 1;
          // 一次读入一行,直到读入null为文件结束
          while ((tempString = reader.readLine()) != null) {
              // 显示行号
              System.out.println("line " + line + ": " + tempString);
              line++;
          }
          reader.close();
      } catch (IOException e) {
          e.printStackTrace();
      } finally {
          if (reader != null) {
              try {
                  reader.close();
              } catch (IOException e1) {
              }
          }
      }
  }
/**
*将一个文件的内容写入另一个文件(按行来写)
*/
public class FileTest {
public static void main(String[] args)   {
    File  file=new File("c:\\test.txt");
    BufferedReader read=null;
    BufferedWriter writer=null;
    
    try {
      writer=new BufferedWriter(new  FileWriter("c:\\zwm.txt"));
    } catch (IOException e1) {
      e1.printStackTrace();
    }
    
    try {
      read=new BufferedReader(new  FileReader(file));
      String tempString = null;
      
      while((tempString=read.readLine())!=null){
          writer.append(tempString);
          writer.newLine();//换行
          writer.flush();//需要及时清掉流的缓冲区,万一文件过大就有可能无法写入了
      }
      
      read.close();
      writer.close();
      System.out.println("文件写入完成...");
    } catch (IOException e) {
      e.printStackTrace();
    }
}
}

  • IO流的分类:
    1、根据流的数据对象来分:
    高端流:所有的内存中的流都是高端流,比如:InputStreamReader 
    低端流:所有的外界设备中的流都是低端流,比如InputStream,OutputStream 
    如何区分:所有的流对象的后缀中包含Reader或者Writer的都是高端流,反之,则基本上为低端流,不过也有例外,比如PrintStream就是高端流

  • 2、根据数据的流向来分:
    输出流:是用来写数据的,是由程序(内存)--->外界设备
    输入流:是用来读数据的,是由外界设备--->程序(内存)
    如何区分:一般来说输入流带有Input,输出流带有Output

  • 3、根据流数据的格式来分:
    字节流:处理声音或者图片等二进制的数据的流,比如InputStream 
    字符流:处理文本数据(如txt文件)的流,比如InputStreamReader 
    如何区分:可用高低端流来区分,所有的低端流都是字节流,所有的高端流都是字符流

  • 4、根据流数据的包装过程来分:
    原始流:在实例化流的对象的过程中,不需要传入另外一个流作为自己构造方法的参数的流,称之为原始流。
    包装流:在实例化流的对象的过程中,需要传入另外一个流作为自己构造方法发参数的流,称之为包装流。
    如何区分:所以的低端流都是原始流,所以的高端流都是包装流

IO流对象的继承关系(如下图):

\


本文转载自:http://www.2cto.com/kf/201312/266161.html

共有 人打赏支持
猴亮屏

猴亮屏

粉丝 29
博文 505
码字总数 52840
作品 2
北京
Android工程师
培训云计算学校,虚拟机基本结构讲解

我们要对JVM虚拟机的结构有一个感性的认知。毕竟我们不是编程人员,认知程度达不到那么深入。一个运行时的Java虚拟机实例的天职是:负责运行一个java程序。当启动一个Java程序时,一个虚拟机...

长沙千锋 ⋅ 05/17 ⋅ 0

Java编程基础知识点和技术点归纳

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰 ⋅ 05/23 ⋅ 0

关于Java编程基础学习输入输出IO的问题

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰 ⋅ 05/23 ⋅ 0

百词斩Java程序员面试11个问题,你会几个?2018-04-10

近日,我们在w3cschool app开发者头条上,可以看到百词斩Java程序员面经。 在分享百词斩Java面经前,w3cschool特别给程序员小伙伴们带来一些Java学习干货: 0、学习Java必备的3大神器 如果你...

W3Cschool ⋅ 04/10 ⋅ 0

Sharding-JDBC 3.0 即将发布,更名 Sharding-Sphere !

8日下午,知名开源数据库中间件 Sharding-JDBC 创始人张亮在朋友圈中发布了一个动态,表示 Sharding-JDBC 3.0 将于近期发布。 从该动态我们可以知道,从 3.0 开始,Sharding-JDBC 将更名为 ...

雨田桑 ⋅ 05/08 ⋅ 16

集成 Proxy 与 DB Mesh,Sharding-JDBC 3 将"Sharding"做到极致

嘉宾:张亮 作者:雨多田光 提起数据库中间件,我们可以很自然地联想到 OneProxy、TDSQL、Sharding-JDBC 与 MyCat 等知名项目。在众多的数据库中间件实现技术中,通常存在两种架构模式,一种...

编辑部的故事 ⋅ 05/23 ⋅ 18

Java开发每日复盘2018_0511

今天主要跟大家来分享一下「MyBatis的使用」 一句话概括: 「MyBatis」,是一种介于Java对象与数据库(MySql等)之间的用于持久化存储的框架。 使用「MyBatis」好处: 可以更高效的,基于该框...

ZeroOSTalk ⋅ 05/13 ⋅ 0

深入理解JVM学习笔记(一、总览)

1、JVM历史 2、JVM内存结构 3、JVM垃圾回收机制 4、JVM性能监控工具 5、JVM性能调优案例时间 6、JVM类文件结构 7、JVM类加载机制 8、JVM字节码执行引擎 9、JVM虚拟机编译及其运行时优化 10、...

jintaohahahaha ⋅ 05/28 ⋅ 0

编写你的第一个HelloWorld

写在前面的话 因为Java基础是以后学习框架的基石,因此开个文集首先写写Java基础,本来想直奔基础知识的介绍,但是为了保证知识的完整性,因此从Java安装和运行“hello world”开始(虽然百度...

nanaFighting ⋅ 06/15 ⋅ 0

做几道基础的Java测试题,看看最近有进步吗?欢迎来学习

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

启示录是真的 ⋅ 05/24 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

高并发之Nginx的限流

首先Nginx的版本号有要求,最低为1.11.5 如果低于这个版本,在Nginx的配置中 upstream web_app { server 到达Ip1:端口 max_conns=10; server 到达Ip2:端口 max_conns=10; } server { listen ...

算法之名 ⋅ 今天 ⋅ 0

Spring | IOC AOP 注解 简单使用

写在前面的话 很久没更新笔记了,有人会抱怨:小冯啊,你是不是在偷懒啊,没有学习了。老哥,真的冤枉:我觉得我自己很菜,还在努力学习呢,正在学习Vue.js做管理系统呢。即便这样,我还是不...

Wenyi_Feng ⋅ 今天 ⋅ 0

博客迁移到 https://www.jianshu.com/u/aa501451a235

博客迁移到 https://www.jianshu.com/u/aa501451a235 本博客不再更新

为为02 ⋅ 今天 ⋅ 0

win10怎么彻底关闭自动更新

win10自带的更新每天都很多,每一次下载都要占用大量网络,而且安装要等得时间也蛮久的。 工具/原料 Win10 方法/步骤 单击左下角开始菜单点击设置图标进入设置界面 在设置窗口中输入“服务”...

阿K1225 ⋅ 今天 ⋅ 0

Elasticsearch 6.3.0 SQL功能使用案例分享

The best elasticsearch highlevel java rest api-----bboss Elasticsearch 6.3.0 官方新推出的SQL检索插件非常不错,本文一个实际案例来介绍其使用方法。 1.代码中的sql检索 @Testpu...

bboss ⋅ 今天 ⋅ 0

informix数据库在linux中的安装以及用java/c/c++访问

一、安装前准备 安装JDK(略) 到IBM官网上下载informix软件:iif.12.10.FC9DE.linux-x86_64.tar放在某个大家都可以访问的目录比如:/mypkg,并解压到该目录下。 我也放到了百度云和天翼云上...

wangxuwei ⋅ 今天 ⋅ 0

PHP语言系统ZBLOG或许无法重现月光博客的闪耀历史[图]

最近在写博客,希望通过自己努力打造一个优秀的教育类主题博客,名动江湖,但是问题来了,现在写博客还有前途吗?面对强大的自媒体站点围剿,还有信心和可能型吗? 至于程序部分,我选择了P...

原创小博客 ⋅ 今天 ⋅ 0

IntelliJ IDEA 2018.1新特性

工欲善其事必先利其器,如果有一款IDE可以让你更高效地专注于开发以及源码阅读,为什么不试一试? 本文转载自:netty技术内幕 3月27日,jetbrains正式发布期待已久的IntelliJ IDEA 2018.1,再...

Romane ⋅ 今天 ⋅ 0

浅谈设计模式之工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻...

佛系程序猿灬 ⋅ 今天 ⋅ 0

Dockerfile基础命令总结

FROM 指定使用的基础base image FROM scratch # 制作base image ,不使用任何基础imageFROM centos # 使用base imageFROM ubuntu:14.04 尽量使用官方的base image,为了安全 LABEL 描述作...

ExtreU ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部