文档章节

java文件的读写

猴亮屏
 猴亮屏
发布于 2014/06/04 16:32
字数 1110
阅读 81
收藏 9
/**
 * 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。 
 */ 
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

共有 人打赏支持
猴亮屏

猴亮屏

粉丝 35
博文 517
码字总数 56802
作品 4
北京
Android工程师
Android Serializable与Parcelable原理与区别

一、序列化、反序列化是什么? (1) 名词解释 对象的序列化 : 把Java对象转换为字节序列并存储至一个储存媒介的过程。 对象的反序列化:把字节序列恢复为Java对象的过程。 (2) 序列化详细解释 ...

KingMing
2015/04/16
0
0
JAVA NIO编程入门(一)

JAVA NIO编程入门(一) 一、前言 笔者之前接触的NIO编程比较少,所以对这一块的基础也比较弱,NIO作为java编程中一个重要的模块,不能很好的掌握它,感觉自己在java方面就掌握的不够,所以,...

木木匠
09/01
0
0
通过jstack日志分析和问题排查

简介 jstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁...

谢思华
06/29
0
0
Jps介绍以及解决jps无法查看某个已经启动的java进程问题

对于jps较熟悉可以直接查看第二部分的分析 1、jps的作用 jps类似linux的ps命令,不同的是ps是用来显示进程,而jps只显示java进程,准确的说是当前用户已启动的部分java进程信息,信息包括进程...

疯狂的艺术家
2012/02/01
0
5
【翻译】JAVA堆和原生内存谁更快?

这是我的第一篇翻译的比较完整的博文,若有错处请指出。这篇文章从两个测试去比较了JAVA堆和原生内存的读写操作。 译文出处:http://lipspace.duapp.com 原文出处:http://mentablog.solive...

陈昊Sevens
2014/04/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

linux学习-0919

linux和windows互传文件 用户配置文件和密码配置文件 用户组管理 用户管理 一、linux和windows互传文件 linux和windows可以互相传输文件,但是需要使用xshell 并且安装lrzsz包: yum insta...

wxy丶
23分钟前
1
0
收集几个开源的微信小程序开发框架

1、 mpvue mpvue 是美团点评开源的一个使用 Vue.js 开发小程序的前端框架。框架基于 Vue.js 核心,mpvue 修改了 Vue.js 的 runtime 和 compiler 实现,使其可以运行在小程序环境中,从而为小...

哥本哈根的小哥
29分钟前
1
0
Golang CSP并发模型

今天介绍一下 go语言的并发机制以及它所使用的CSP并发模型 CSP并发模型 CSP模型是上个世纪七十年代提出的,用于描述两个独立的并发实体通过共享的通讯 channel(管道)进行通信的并发模型。 CS...

xtof
30分钟前
1
0
用chrome在电脑上模拟微信内置浏览器

先了解安卓微信和Ios微信的UA(User agent:用户代理) 安卓微信UA: mozilla/5.0 (linux; u; android 4.1.2; zh-cn; mi-one plus build/jzo54k) applewebkit/534.30 (khtml, like gecko) ve......

可达鸭眉头一皱
36分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部