• FileInputStream和FileOutputStream类分别用来创建磁盘文件的输入流和输出流对象,通过它们的构造函数来指定文件路径和文件名。
  • 创建FileInputStream实例对象时,指定的文件应当是存在和可读的。创建FileOutputStream实例对象时,如果指定的文件已经存在,这个文件中的原来内容将被覆盖清除。
  • 对同一个磁盘文件创建FileInputStream对象的两种方式:   (1)FileInputStream inOne = new FileInputStream("hello.test");     (2)File f = new File("hello.test");      FileInputStream inTwo = new FileInputStream(f);
  • 创建FileOutputStream实例对象时,可以指定还不存在的文件名,但不能指定一个已被其他程序打开了的文件。
 
思考:要将A文件的内容写入B文件,在程序代码中,是用输出类对象,还是用输入类对象来连接A文件并完成对A文件的操作呢?
 
(要记住:这里说的输入和输出的概念都是相对这个应用程序而言的,而不相对这个文件而言的。如下图)
所以我们应该创建一个输入类来读取A文件的内容,然后创建一个输出类将这些内容输出到B文件中。(如下图)
 
编程实例:用FileOutputStream类向文件中写入一个串字符,然后用FileInputStream读出写入的内容。
 
//FileStream.java
 
import java.io.*;
 
public class FileStream{
   public static void main(String[] args) throws Exception {
      FileOutputStream out = new FileOutputStream("hello.txt");
      out.write("www.sina.com.cn".getBytes()); //把字符串转化为字节数组并写入到流中
      out.close();
 
      byte[] buf = new byte[1024];
      File f = new File("hello.txt");
      FileInputStream in = new FileInputStream(f);
      int len = in.read(buf); //读取内容到字节数组中
      System.out.println(new String(buf,0,len)); //String构造函数把字节数组转化为字符串,注:buf应该是字符数组(char[])、字节数组(byte[])、整型数组(int[])            意思就是从数组中取出从下标0开始的len个元素来生成字符串对象,打印
      in.close();
   }
}
 
 
 
Reader类和Writer类
 
  • Reader和Writer是所有字符流类的抽象基类,用于简化对字符串的输入输出编程,即用于读写文本数据。
  • 二进制文件和文本文件的区别。严格的说文件系统中的每个文件都是二进制文件。各种文本字符是由一个或几个字节组成的,其中每个字节的数 据不能是任意的。如果一个文件中的每个字节或每相邻的几个字节中的数据都可以表示成某种字符,我们就可以称这个文件为文本文件。可见文本文件只是二进制文 件的一种特例。为了与文本文件相区别,人们又把文本文件以外的文件称之为二进制文件。在概念上我们可以简单的认为:如果一个文件专用于存储文本字符而没有 包含字符之外的其他数据,就称之为文本文件,除此之外的文件就是二进制文件。
 
Reader与Writer类及其子类(FileReader和FileWriter类等)主要用于读取文本格式的内容,而InputStream和OutputStream类及它们的子类主要读取二进制格式的内容。
 
编程实例:用FileWriter类向文件中写入一个串字符,然后用FileReader读出写入的内容。
 
//FileStream2.java
 
import java.io.*;
 
public class FileStream2{
   public static void main(String[] args) throws Excetpion {
      FileWriter out = new FileWriter("hello2.txt");
      out.write("www.sina.com.cn"); //在此可以直接写入字符串,不用转化为字节数组
      out.close();
 
      char[] buf = new char[1024];  //字符数组
      FileReader in = new FileReader("hello2.txt");
      int len = in.read(buf); //此时的read方法可以读取一个字符或几个字符,len代表实际读取到的字符的个数。
      System.out.println(new String(buf,0,1024)); //String构造函数把字符数组转化为字符串。
      in.close();
   }
}

FileInputStream与FileOutputStream类 Reader类和Writer类 解析的更多相关文章

  1. FileInputStream与FileOutputStream类

    FileInputStream和FileOutputStream类分别用来创建磁盘文件的输入流和输出流对象,通过它们的构造函数来指定文件路径和文件名. 创建FileInputStream实例对象时,指 ...

  2. Android系统--输入系统(九)Reader线程_核心类及配置文件

    Android系统--输入系统(九)Reader线程_核心类及配置文件 1. Reader线程核心类--EventHub 1.1 Reader线程核心结构体 实例化对象:mEventHub--表示多个 ...

  3. Android系统--输入系统(十)Reader线程_核心类及配置文件深入分析

    Android系统--输入系统(十)Reader线程_核心类及配置文件深入分析 0. 前言 个人认为该知识点阅读Android源代码会不仅容易走进死胡同,并且效果并不好,前脚看完后脚忘记,故进行总结, ...

  4. java-IO流-字节流-概述及分类、FileInputStream、FileOutputStream、available()方法、定义小数组、BufferedInputStream、BufferedOutputStream、flush和close方法的区别、流的标准处理异常代码

    1.IO流概述及其分类 * 1.概念      * IO流用来处理设备之间的数据传输      * Java对数据的操作是通过流的方式      * Java用于操作流的类都在IO包中      *  ...

  5. 013-java中的IO操作-InputStream/Reader、OutputStream/Writer

    一.概述 IO流用来处理设备之间的数据传输,上传文件和下载文件,Java对数据的操作是通过流的方式,Java用于操作流的对象都在IO包中. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称 ...

  6. Java常用工具类---IP工具类、File文件工具类

    package com.jarvis.base.util; import java.io.IOException;import java.io.InputStreamReader;import jav ...

  7. 【Java IO】FileInputStream 和 FileOutputStream

    class FileInputStream extends  InputStream implements Closeable

  8. JAVA FILE or I/O学习 - I/O流操作:FileInputStream、FileOutputStream、ObjectInputStream、ObjectOutputStream、InputStreamReader、OutputStreamWriter等

    public class IOStreamKnow { /*********************************文件读写方式:字节流**************************** ...

  9. 深入解析FileInputStream和FileOutputStream

    http://swiftlet.net/archives/1363 FileInputStream和FileOutputStream类属于字节类,可以操作任意类型的文件.在数据流的处理过程中,有两种情 ...

随机推荐

  1. mkyaffs2image编译

    http://blog.chinaunix.net/uid-26009923-id-3760474.htmlhttp://blog.csdn.net/xingtian19880101/article/ ...

  2. hadoop上线和下线节点

    在运行中的ambari hadoop集中中动态添加或删除节点 1. 下线节点1) namenode节点上dfs.exclude文件,看配置文件怎么配置的,里每行添加一个服务器名,如我要下线server ...

  3. linux设置开机服务自动启动/关闭自动启动命令

    linux设置开机服务自动启动/关闭自动启动命令 2012-02-06 15:13 [root@localhost ~]# chkconfig --list     显示开机可以自动启动的服务[roo ...

  4. Linux C定时器使用指南

    使用定时器的目的是为了周期性的执行某一任务,或者是到了某个指定时间去执行某一任务.要达到这一目的,一般有两个常见的方法.一个是用linux内部的三个定时器,另一个是用sleep, usleep函数让进 ...

  5. 消息中间件系列之ActiveMQ的简单安装

    本次测试使用一台ip为192.168.2.12的虚拟机 一.解压压缩包 tar -zxvf apache-activemq-5.14.4-bin.tar.gz 二.启动activemq 进入到bin目 ...

  6. Python版本,pip版本手动管理

    http://blog.csdn.net/jiandanjinxin/article/details/53175121

  7. Android ArryaList 笔记

    Arraylist相当于动态数组,可以动态的添加或者删除其中的元素. 参考链接 http://beginnersbook.com/2013/12/java-arraylist/ package com ...

  8. (转)RTP协议全解(H264码流和PS流)

    写在前面:RTP的解析,网上找了很多资料,但是都不全,所以我力图整理出一个比较全面的解析, 其中借鉴了很多文章,我都列在了文章最后,在此表示感谢. 互联网的发展离不开大家的无私奉献,我决定从我做起,希 ...

  9. R语言绘图边框的单位

    在R语言中指定画图边框时,通常使用两种单位, lines 和 inches 当然,这两个单位之间是可以相互转换的,那么 1 inch = ? line 答案是1 inches = 5 lines 下面 ...

  10. Oracle-批量修改语句及相关知识点

    问: 有两张表A和B,结构相同,数据量一致,比如都有x,y和z列且都有n行,x为主键,完全相等,如何把表B的y列的数据赋值给A的y列? 我写的是1 update A set A.y=B.y where ...