zoukankan      html  css  js  c++  java
  • java io系列07之 FileInputStream和FileOutputStream

     

    本章介绍FileInputStream 和 FileOutputStream 

    转载请注明出处:http://www.cnblogs.com/skywang12345/p/io_07.html

    FileInputStream 和 FileOutputStream 介绍

    FileInputStream 是文件输入流,它继承于InputStream。
    通常,我们使用FileInputStream从某个文件中获得输入字节。
    FileOutputStream 是文件输出流,它继承于OutputStream。
    通常,我们使用FileOutputStream 将数据写入 File 或 FileDescriptor 的输出流。

    关于File的介绍,可以参考文章“java io系列08之 File总结” 。
    关于FileDescriptor的介绍,可以参考文章“java io系列09之 FileDescriptor总结”。

    FileInputStream 函数接口

    FileInputStream(File file)         // 构造函数1:创建“File对象”对应的“文件输入流”
    FileInputStream(FileDescriptor fd) // 构造函数2:创建“文件描述符”对应的“文件输入流”
    FileInputStream(String path)       // 构造函数3:创建“文件(路径为path)”对应的“文件输入流”
    
    int      available()             // 返回“剩余的可读取的字节数”或者“skip的字节数”
    void     close()                 // 关闭“文件输入流”
    FileChannel      getChannel()    // 返回“FileChannel”
    final FileDescriptor     getFD() // 返回“文件描述符”
    int      read()                  // 返回“文件输入流”的下一个字节
    int      read(byte[] buffer, int byteOffset, int byteCount) // 读取“文件输入流”的数据并存在到buffer,从byteOffset开始存储,存储长度是byteCount。
    long     skip(long byteCount)    // 跳过byteCount个字节

    FileOutputStream 函数接口

    FileOutputStream(File file)                   // 构造函数1:创建“File对象”对应的“文件输入流”;默认“追加模式”是false,即“写到输出的流内容”不是以追加的方式添加到文件中。
    FileOutputStream(File file, boolean append)   // 构造函数2:创建“File对象”对应的“文件输入流”;指定“追加模式”。
    FileOutputStream(FileDescriptor fd)           // 构造函数3:创建“文件描述符”对应的“文件输入流”;默认“追加模式”是false,即“写到输出的流内容”不是以追加的方式添加到文件中。
    FileOutputStream(String path)                 // 构造函数4:创建“文件(路径为path)”对应的“文件输入流”;默认“追加模式”是false,即“写到输出的流内容”不是以追加的方式添加到文件中。
    FileOutputStream(String path, boolean append) // 构造函数5:创建“文件(路径为path)”对应的“文件输入流”;指定“追加模式”。
    
    void                    close()      // 关闭“输出流”
    FileChannel             getChannel() // 返回“FileChannel”
    final FileDescriptor    getFD()      // 返回“文件描述符”
    void                    write(byte[] buffer, int byteOffset, int byteCount) // 将buffer写入到“文件输出流”中,从buffer的byteOffset开始写,写入长度是byteCount。
    void                    write(int oneByte)  // 写入字节oneByte到“文件输出流”中

    示例程序

    关于FileInputStream和FileOutputStream的API用法,参考示例代码(FileStreamTest.java): 

      1 import java.io.File;
      2 import java.io.FileDescriptor;
      3 import java.io.FileInputStream;
      4 import java.io.FileOutputStream;
      5 import java.io.BufferedInputStream;
      6 import java.io.BufferedOutputStream;
      7 import java.io.PrintStream;;
      8 import java.io.IOException;
      9 
     10 /**
     11  * FileInputStream 和FileOutputStream 测试程序
     12  *
     13  * @author skywang
     14  */
     15 public class FileStreamTest {
     16 
     17     private static final String FileName = "file.txt";
     18 
     19     public static void main(String[] args) {
     20         testWrite();
     21         testRead();
     22     }
     23 
     24     /**
     25      * FileOutputStream 演示函数
     26      *
     27      * 运行结果:
     28      * 在源码所在目录生成文件"file.txt",文件内容是“abcdefghijklmnopqrstuvwxyz0123456789”
     29      *
     30      * 加入,我们将 FileOutputStream fileOut2 = new FileOutputStream(file, true);
     31      *       修改为 FileOutputStream fileOut2 = new FileOutputStream(file, false);
     32      * 然后再执行程序,“file.txt”的内容变成"0123456789"。
     33      * 原因是:
     34      * (01) FileOutputStream fileOut2 = new FileOutputStream(file, true);
     35      *      它是以“追加模式”将内容写入文件的。即写入的内容,追加到原始的内容之后。
     36      * (02) FileOutputStream fileOut2 = new FileOutputStream(file, false);
     37      *      它是以“新建模式”将内容写入文件的。即删除文件原始的内容之后,再重新写入。
     38      */
     39     private static void testWrite() {
     40         try {
     41             // 创建文件“file.txt”对应File对象
     42             File file = new File(FileName);
     43             // 创建文件“file.txt”对应的FileOutputStream对象,默认是关闭“追加模式”
     44             FileOutputStream fileOut1 = new FileOutputStream(file);
     45             // 创建FileOutputStream对应的PrintStream,方便操作。PrintStream的写入接口更便利
     46             PrintStream out1 = new PrintStream(fileOut1);
     47             // 向“文件中”写入26个字母
     48             out1.print("abcdefghijklmnopqrstuvwxyz");
     49             out1.close();
     50 
     51             // 创建文件“file.txt”对应的FileOutputStream对象,打开“追加模式”
     52             FileOutputStream fileOut2 = new FileOutputStream(file, true);
     53             // 创建FileOutputStream对应的PrintStream,方便操作。PrintStream的写入接口更便利
     54             PrintStream out2 = new PrintStream(fileOut2);
     55             // 向“文件中”写入"0123456789"+换行符
     56             out2.println("0123456789");
     57             out2.close();
     58 
     59         } catch(IOException e) {
     60             e.printStackTrace();
     61         }
     62     }
     63 
     64     /**
     65      * FileInputStream 演示程序
     66      */
     67     private static void testRead() {
     68         try {
     69             // 方法1:新建FileInputStream对象
     70             // 新建文件“file.txt”对应File对象
     71             File file = new File(FileName);
     72             FileInputStream in1 = new FileInputStream(file);
     73 
     74             // 方法2:新建FileInputStream对象
     75             FileInputStream in2 = new FileInputStream(FileName);
     76 
     77             // 方法3:新建FileInputStream对象
     78             // 获取文件“file.txt”对应的“文件描述符”
     79             FileDescriptor fdin = in2.getFD();
     80             // 根据“文件描述符”创建“FileInputStream”对象
     81             FileInputStream in3 = new FileInputStream(fdin);
     82 
     83             // 测试read(),从中读取一个字节
     84             char c1 = (char)in1.read();
     85             System.out.println("c1="+c1);
     86 
     87             // 测试skip(long byteCount),跳过4个字节
     88             in1.skip(25);
     89 
     90             // 测试read(byte[] buffer, int byteOffset, int byteCount)
     91             byte[] buf = new byte[10];
     92             in1.read(buf, 0, buf.length);
     93             System.out.println("buf="+(new String(buf)));
     94 
     95 
     96             // 创建“FileInputStream”对象对应的BufferedInputStream
     97             BufferedInputStream bufIn = new BufferedInputStream(in3);
     98             // 读取一个字节
     99             char c2 = (char)bufIn.read();
    100             System.out.println("c2="+c2);
    101 
    102             in1.close();
    103             in2.close();
    104             in3.close();
    105         } catch(IOException e) {
    106             e.printStackTrace();
    107         }
    108     }
    109 }

    运行结果

    c1=a
    buf=0123456789
    c2=a

    结果说明
    运行程序,会在源码所在位置新生成一个文件“file.txt”。它的内容是“abcdefghijklmnopqrstuvwxyz0123456789”。

  • 相关阅读:
    韩式英语
    Daily dictation 听课笔记
    words with same pronunciation
    you will need to restart eclipse for the changes to take effect. would you like to restart now?
    glottal stop(britain fountain mountain)
    education 的发音
    第一次用Matlab 的lamada语句
    SVN的switch命令
    String的split
    SVN模型仓库中的资源从一个地方移动到另一个地方的办法(很久才解决)
  • 原文地址:https://www.cnblogs.com/skywang12345/p/io_07.html
Copyright © 2011-2022 走看看