• 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文件中。(如下图)
 aaarticlea/png;base64,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" alt="" />
编程实例:用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构造函数把字节数组转化为字符串
      in.close();
   }
}
 
 
 
Reader类和Writer类
 
  • Reader和Writer是所有字符流类的抽象基类,用于简化对字符串的输入输出编程,即用于读写文本数据。
  • 二进制文件和文本文件的区别。严格的说文件系统中的每个文件都是二进制文件。各种文本字符是由一个或几个字节组成的,其中每个字节的数 据不能是任意的。如果一个文件中的每个字节或每相邻的几个字节中的数据都可以表示成某种字符,我们就可以称这个文件为文本文件。可见文本文件只是二进制文 件的一种特例。为了与文本文件相区别,人们又把文本文件以外的文件称之为二进制文件。在概念上我们可以简单的认为:如果一个文件专用于存储文本字符而没有 包含字符之外的其他数据,就称之为文本文件,除此之外的文件就是二进制文件。
文本文件是指完全由可见字符组成的文件。所谓可见字符是指ASCII码为32到126的字符、回车符(ASCII码13)、换行符(ASCII码10)、制表符(ASCII码9)、以及所有汉字字符(当然也包括其他字符集如韩文、日文、阿拉伯文等等)。如果是Unicode文本,则还包括ASCII码0。
而二进制文件则有多种定义方式,广义的二进制文件是指电脑中的所有文件(包括文本文件),因为电脑中的所有文件其实都是以二进制方式存储的,也就是说每个字符(包括可见字符、控制字符)最终都是以0和1的形式存储在硬盘等介质中的(这也就是为什么说电脑只认识0和1这两个数字的原因);
而狭义的二进制文件则是相对于文本文件而言的,即只要文件中含有除可见字符之外的其他字符(主要是控制字符),就是二进制文件;
而比狭义的二进制文件更有特指性的定义方式则是指可执行文件(EXE)、库函数文件(DLL)、图片视频、数据库文件等等一切由程序代码、机器码、特定的二进制代码和数据等组成的有实际意义的文件。
 
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 用于读取本地文件中的字节数据,继承自InputStream类

构造方法摘要
FileInputStream(File file) 
          通过打开一个到实际文件的连接来创建一个FileInputStream,该文件通过文件系统中的 File 对象 file 指定。
FileInputStream(FileDescriptor fdObj) 
          通过使用文件描述符 fdObj 创建一个FileInputStream,该文件描述符表示到文件系统中某个实际文件的现有连接。
FileInputStream(String name) 
          通过打开一个到实际文件的连接来创建一个FileInputStream,该文件通过文件系统中的路径名 name 指定。
方法摘要
 int available() 
          返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取(或跳过)的估计剩余字节数。
 void close() 
          关闭此文件输入流并释放与此流有关的所有系统资源。
protected  void finalize() 
          确保在不再引用文件输入流时调用其close 方法。
 FileChannel getChannel() 
          返回与此文件输入流有关的唯一FileChannel 对象。
 FileDescriptor getFD() 
          返回表示到文件系统中实际文件的连接的 FileDescriptor 对象,该文件系统正被此FileInputStream 使用。
 int read() 
          从此输入流中读取一个数据字节。
 int read(byte[] b) 
          从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。
 int read(byte[] b, int off, int len) 
          从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。
 long skip(long n) 
          从输入流中跳过并丢弃 n 个字节的数据。

其中read()返回的是读入的一个字节所对应的int值(0-255),而read(byte[] b) 和read(byte[] b, int off, int len) 返回的是读入的字节数

FileOutputStream用于将字节数据写出到文件。继承自OutputStream类

构造方法摘要
FileOutputStream(File file) 
          创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
FileOutputStream(File file, boolean append) 
          创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
FileOutputStream(FileDescriptor fdObj) 
          创建一个向指定文件描述符处写入数据的输出文件流,该文件描述符表示一个到文件系统中的某个实际文件的现有连接。
FileOutputStream(String name) 
          创建一个向具有指定名称的文件中写入数据的输出文件流。
FileOutputStream(String name, boolean append) 
          创建一个向具有指定 name 的文件中写入数据的输出文件流。
方法摘要
 void close() 
          关闭此文件输出流并释放与此流有关的所有系统资源。
protected  void finalize() 
          清理到文件的连接,并确保在不再引用此文件输出流时调用此流的 close 方法。
 FileChannel getChannel() 
          返回与此文件输出流有关的唯一FileChannel 对象。
 FileDescriptor getFD() 
          返回与此流有关的文件描述符。
 void write(byte[] b) 
          将 b.length 个字节从指定 byte 数组写入此文件输出流中。
 void write(byte[] b, int off, int len) 
          将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。
 void write(int b) 
          将指定字节写入此文件输出流。

实例代码:使用这两个类进行文件复制:

    1. import java.io.FileInputStream;
    2. import java.io.FileOutputStream;
    3. import java.io.IOException;
    4. class IODemo
    5. {
    6. public static void main(String[] args)
    7. {
    8. try
    9. {
    10. //使用FileInputStream和FileOutputStream进行文件复制
    11. FileInputStream fis=new FileInputStream("a.txt");
    12. FileOutputStream fos=new FileOutputStream("b.txt");
    13. int read;
    14. //read=fis.read();
    15. byte b[]=new byte[1024];
    16. //读取文件,存入字节数组b,返回读取到的字符数,存入read,默认每次将b数组装满
    17. read=fis.read(b);
    18. while(read!=-1)
    19. {
    20. fos.write(b,0,read);
    21. read=fis.read(b);
    22. //read=fis.read();
    23. }
    24. fis.close();
    25. fos.close();
    26. }
    27. catch (IOException e)
    28. {
    29. e.printStackTrace();
    30. }
    31. }
    32. }

FileInputStream与FileOutputStream类的更多相关文章

  1. FileInputStream与FileOutputStream类 Reader类和Writer类 解析

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

  2. java-io-FileInputStream与FileOutputStream类

    本文转载这里FileInputStream和FileOutputStream类需要注意的问题:  1.FileInputStream和FileOutputStream类分别用来创建磁盘文件的输入流和输 ...

  3. 深入解析FileInputStream和FileOutputStream

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

  4. 字节流与字符流(FileInputStream类和FileOutputStream类)

    FileInputStream类和FileOutputStream类中,第一个类的源端和第二个类的目的端都是磁盘文件,它们的构造方法允许通过文件的路径名来构造相应的流.例如: FileInputSte ...

  5. FileInputStream类与FileOutputStream类

    FileInputStream类是InputStream类的子类.他实现了文件的读取,是文件字节输入流.该类适用于比较简单的文件读取,其所有方法都是从InputStream类继承并重写的.创建文件字节 ...

  6. 字节流, FileOutputStream类,FileInputStream类,复制文件,字符流

    字节输出流OutputStream OutputStream此抽象类,是表示输出字节流的所有类的超类.操作的数据都是字节 基本方法: 子类可继承调用以上方法 FileOutputStream类 构造方 ...

  7. 【Java IO】FileInputStream 和 FileOutputStream

    class FileInputStream extends  InputStream implements Closeable

  8. FileInputStream和FileOutputStream详解

    一.引子 文件,作为常见的数据源.关于操作文件的字节流就是 FileInputStream & FileOutputStream.它们是Basic IO字节流中重要的实现类.二.FileInp ...

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

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

随机推荐

  1. go语言基础之基匿名函数本语法和闭包

    一.匿名函数 示例1: package main import "fmt" func main() { a := 10 str := "mike" //匿名函数 ...

  2. .NET中的六个重要概念

    内容导读 概述 当你声明一个变量背后发生了什么? 堆和栈 值类型和引用类型 哪些是值类型,哪些是引用类型? 装箱和拆箱 装箱和拆箱的性能问题 一.概述 本文会阐述六个重要的概念:堆.栈.值类型.引用类 ...

  3. 如何在mysql数据库中保存emoji特殊字符

    MySQL在5.5.3版本之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode.其实,utf8mb4是utf8的超集,理论上原来使用utf8 ...

  4. 裸裸的线段树(hdu 1754)

    线段树的第一发. 哪天忘了还能够让自己找找回顾. 线段树操作: build  : 建树. update:点改动: query:查询 Input 在每一个測试的第一行,有两个正整数 N 和 M ( 0& ...

  5. 你们对LinearLayout线性布局中Layout_weight的误解

    帮人找个入门级别的书得负责任,自己先看一下有无缺陷,结果发现这个:(原文发在该书的论坛上,发现受众面太小了,无奈转到这个弃用很久的博客里,以后把心得慢慢发上来) Google Android开发入门与 ...

  6. Python模块学习 --- urllib

    urllib模块提供的上层接口,使我们可以像读取本地文件一样读取www和ftp上的数据.每当使用这个模块的时候,老是会想起公司产品的客户端,同事用C++下载Web上的图片,那种“痛苦”的表情.我以前翻 ...

  7. Linux 监测内存常用的工具sar free vmstat

    Linux 检测内存常用的工具sar free vmstat free 内存统计信息解释 total 内存总量used 内存使用的大小free 内存剩余大小shared 共享内存大小buffers 块 ...

  8. UI组件之TextView及其子类(五)计时器Chronometer

    Chronometer直接继承了TextView组件,它会显示一段文本,显示从某个事实上时间開始.一共过了多长时间.我们看Chronometer的源代码: watermark/2/text/aHR0c ...

  9. UESTC-1307-windy数

    windy定义了一种windy数. 不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包含A和B,总共同拥有多少个windy数? Input 包括两个整 ...

  10. HQL的select new map ···语法

    通常hibernate查询出的结果集是类似于 List<T> 或 List<Object[]> 的类型 类似于下面这个方法 public List<SfJmsfT> ...