【Java】IO流--文件字节流--FileInputStream、FileOutputStream

FileInputStream

作用:

文件系统中的文件获取输入字节。 什么文件可用取决于主机环境。用于读取诸如图像数据的原始字节流。

 

构造方法:

FileInputStream(File file)

通过打开与实际文件的连接创建一个 FileInputStream ,该文件由文件系统中的 File对象 file命名。

FileInputStream(String name)

通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。
 

常用方法

available()

返回从此输入流中可以读取(或跳过)的剩余字节数的估计值,而不会被下一次调用此输入流的方法阻塞。
read()
从该输入流读取一个字节的数据。
read(byte[] b)
从该输入流读取最多 b.length个字节的数据为字节数组。
read(byte[] b, int off, int len)
从该输入流读取最多 len字节的数据为字节数组。
close()
关闭此文件输入流并释放与流相关联的任何系统资源。
 

代码

 

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class TestFileInputStream {
    public static void main(String[] args) throws IOException {
        //(1)数据源与应用程序之间搭建管道
        FileInputStream fis=new FileInputStream("F://test.txt");
        
        //(2)从数据源开始向应用程序中读数据
        int len=0;//存储读到的字节
        //中转站比较小,一次只读一个字节
        
        while((len=fis.read())!=-1) {
            System.out.print((char)len);
        }
        
        //(3)关闭
        fis.close();
    }
}

 

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class TestFileInputStream {
    public static void main(String[] args) throws IOException {
        //(1)搭桥
        FileInputStream fis=new FileInputStream(new File("F://test.txt"));
        
        //(2)创建大一点的中转站
        byte[] buf=new byte[1024];
        int len=0;//用于储存每次读到的实际字节
        
        while((len=fis.read(buf))!=-1) {
            System.out.print(new String(buf,0,buf.length));
        }
        
        //(3)关闭
        fis.close();
    }
}

 FileOutStream

 作用:

文件输出流是用于将数据写入到输出流File或一个FileDescriptor 。 文件是否可用或可能被创建取决于底层平台。 特别是某些平台允许一次只能打开一个文件来写入一个FileOutputStream (或其他文件写入对象)。 在这种情况下,如果所涉及的文件已经打开,则此类中的构造函数将失败。

用于写入诸如图像数据的原始字节流。

 

构造方法:

FileOutputStream(File file)

创建文件输出流以写入由指定的 File对象表示的文件。

FileOutputStream(File file, boolean append)

创建文件输出流以写入由指定的 File对象表示的文件。

apeend=true 时,表示当文件存在且不为空时再原有文件的基础上进行内容的追加。

FileOutputStream(String name)

创建文件输出流以指定名称写入文件。

FileOutputStream(String name, boolean append)

创建文件输出流以指定名称写入文件。

apeend=true 时,表示当文件存在且不为空时再原有文件的基础上进行内容的追加。

 

常用方法:

write(int b)

将指定的字节写入此文件输出流。
write(byte[] b)
将  b.length 个字节从指定的字节数组写入此文件输出流。
write(byte[] b, int off, int len)
len字节从位于偏移量 off的指定字节数组写入此文件输出流。
close()
关闭此文件输出流并释放与此流相关联的任何系统资源。

 

代码

 

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class TestFileOutputStream {
    public static void main(String[] args) {
        //(1)搭桥
        FileOutputStream fos=null;
        try {
            fos = new FileOutputStream("F://test.txt",true);//true如果磁盘上有文件,而且文件有内容,将在原来的内容的基础上进行追加
            //写数据,一次写一个字节
            //fos.write(97);
            //(2)写数据,一次写多个字节
            byte[] buf="fff".getBytes();
            
            fos.write(buf);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            try {
                if(fos!=null) {
                    //(3)关闭
                    fos.close();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
    }
}

 

使用文件字节流实现文件复制

文件复制的原理

 

 代码

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class TestFileIO {
    public static void main(String[] args) {
        FileInputStream fis=null;
        FileOutputStream fos=null;
        
        try {
            //数据源是文件
            fis=new FileInputStream("F://test.txt");
            //目的地
            fos=new FileOutputStream("F://target.txt");
            
            byte[] flush=new byte[1024];
            int len=0;
            
            while((len=fis.read(flush))!=-1) {
                fos.write(flush, 0, len);
            }
            
            /*
             * int b=0;
             * 
             * while((b=fis.read())!=-1){ fos.write(b); }
             */
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            try {
                if(fos!=null) {
                    fos.close();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            try {
                if(fis!=null) {
                    fis.close();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
        
    }
}

 

 

原文地址:https://www.cnblogs.com/syxy/p/12262003.html