Java FileInputStream与FileOutputStream使用详解

什么是InputStream和OutputStream?

InputStream和OutputStream是抽象类,是所有字节输入流和输出流的父类。这里,我们首先要分清楚两个概念:

  • InputStream(输入流):输入流是用来读入数据的。- - - > > >读入
  • OutputStream(输出流):输出流是用来写出数据的。- - - > > >写出

文件输入流——FileInputStream

FileInputStream 从文件系统中的某个文件中获得输入字节。

构造方法

//通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。
public FileInputStream(File file);

//通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。
public FileInputStream(String name);

常用的方法

从输入流中读取一个字节大小的数据

//从此输入流中读取一个数据字节。
public int read();

从输入流一次读取一个字节数组

//从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。
public int read(byte[] b);

//从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。off:目标数组 b 中的起始偏移量。
public int read(byte[] b,int off,int len);

从文件中读取数据:

import java.io.FileInputStream;

/**
 * FileInputStream:节点流(低级流),从文件中读入数据
 * @author Administrator
 *
 */
public class FISDemo01 {
    public static void main(String[] args){
        String content=null;
        try {
            int size=0;
            //定义一个字节缓冲区,该缓冲区的大小根据需要来定义
            byte[] buffer=new byte[1024];
            FileInputStream fis=new FileInputStream("FOSDemo.txt");
            //循环来读取该文件中的数据
            while((size=fis.read(buffer))!=-1){
                content=new String(buffer, 0, size);
                System.out.println(content);
            }
        //关闭此文件输入流并释放与此流有关的所有系统资源。
        fis.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

文件输出流——FileOutputStream

文件输出流是用于将数据写入到文件中。

构造方法

//创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
public FileOutputStream(File file);

//创建一个向指定 File 对象表示的文件中写入数据的文件输出流。如果第二个参数为 true,则将字节写入文件末尾处,而不是写入文件开始处。
public FileOutputStream(File file,boolean append);

//创建一个向具有指定名称的文件中写入数据的输出文件流。
public FileOutputStream(String name);

//创建一个向具有指定 name 的文件中写入数据的输出文件流。如果第二个参数为 true,则将字节写入文件末尾处,而不是写入文件开始处。
public FileOutputStream(String name,boolean append);

常用方法

向文件中写入一个字节大小的数据

//向文件中写入一个字节大小的数据
public void write(int b);

向文件中一次性写入一个字节数组的数据

//将 b.length 个字节从指定 byte 数组写入此文件输出流中。
public void write(byte[] b);

//指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。
public void write(byte[] b,int off,int len);

向文件中写出数据:

import java.io.FileOutputStream;

/**
 * FileOutputStream:节点流(低级流),向文件中写出数据
 * @author Administrator
 *
 */
public class FOSDemo01 {
    public static void main(String[] args){
        try {
            //向文件中写入字节数组
            String font="输出流是用来写入数据的!";
            FileOutputStream fos = new FileOutputStream("FOSDemo.txt");
            fos.write(font.getBytes());
            //关闭此文件输出流并释放与此流有关的所有系统资源。此文件输出流不能再用于写入字节。 如果此流有一个与之关联的通道,则关闭该通道。
            fos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

使用FileInputStream和FileOutputStream实现文件的复制

import java.io.FileInputStream;
import java.io.FileOutputStream;

/**
 * 使用文件输入流和文件输出流实现文件的复制
 * @author Administrator
 *
 */
public class SummaryFISAndFOS {
    public static void main(String[] args){
        /**
         * 1.先将文件中的内容读入到输入流中
         * 2.将输入流中的数据通过输出流写入到目标文件中
         * 3.关闭输入流和输出流
         */
        try {
            long begin=System.currentTimeMillis();
            //从输入流中读取数据
            FileInputStream fis=new FileInputStream("FOSDemo.txt");
            //向输出流中写入数据
            FileOutputStream fos=new FileOutputStream("FISAndFOSDest.txt");
            //先定义一个字节缓冲区,减少I/O次数,提高读写效率
            byte[] buffer=new byte[10240];
            int size=0;
            while((size=fis.read(buffer))!=-1){
                fos.write(buffer, 0, size);
            }
            fis.close();
            fos.close();
            long end=System.currentTimeMillis();
            System.out.println("使用文件输入流和文件输出流实现文件的复制完毕!耗时:"+(end-begin)+"毫秒");
        } catch (Exception e) {
            e.printStackTrace();
        }
        //解决JNI问题(Java Native Interface)
        System.exit(0);
    }
}

运行结果:
使用文件输入流和文件输出流实现文件的复制完毕!耗时:17毫秒

以上基本上就是我们经常用到的方法的介绍,记得最后一定要close()哦!

到此这篇关于Java FileInputStream与FileOutputStream使用详解的文章就介绍到这了,更多相关Java FileInputStream与FileOutputStream内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java基础之FileInputStream和FileOutputStream流详解

    一.前言 FileInputStream 用于读取本地文件中的字节数据,继承InputStream类 FileOutputStream 将字节数据写到文件,继承OutputStream类 二.创建流对象 FileInputStream fis= new FileInputStream("绝对路径"); FileOutputStream fos= new FileOutputStream("绝对路径"); 三.FileInputStream常用方法 1.构造函数,打开

  • Java使用FileInputStream流读取文件示例详解

    一.File流概念 JAVA中针对文件的读写操作设置了一系列的流,其中主要有FileInputStream,FileOutputStream,FileReader,FileWriter四种最为常用的流 二.FileInputStream 1)FileInputStream概念  FileInputStream流被称为文件字节输入流,意思指对文件数据以字节的形式进行读取操作如读取图片视频等 2)构造方法 2.1)通过打开与File类对象代表的实际文件的链接来创建FileInputStream流对象

  • Java中的FileInputStream 和 FileOutputStream 介绍_动力节点Java学院整理

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

  • Android 数据存储之 FileInputStream 工具类及FileInputStream类的使用

    安卓的三种本地的典型数据存储方式 SharedPreferences 以文件格式保存在本地存储中 SQL数据库 这篇文章就是讲解一下如何使用 SharedPreferences 保存文件.主要解释什么都写在注释里面的. IDE : Android Studio 参考文章:http://www.jb51.net/article/74215.htm 絮叨一下:本来文件操作这一块上周就想把其弄懂,然后继续进一步的学习.但是因为官方的 Android Training 之中的概念太过于繁杂.导致我认为存

  • 详解FileInputStream读取文件数据的两种方式

    FileInputStream(文件字节读取流): read():一个一个字节的读 read(byte[] buf):先把字节存入到缓冲区字节数组中,一下读一个数组(常用) import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Arrays; public class FileIn

  • Java FileInputStream读中文乱码问题解决方案

    1.前提 以读取编码是GBK的文件为案例,文件内容只有中文和中文符号 2.原因 FileInputStream读中文乱码是因为一个中文对应两个字节存储(负数),也就是说,读取对应中文的字节数应该是偶数: 而英文对应一个字节存储.FileInputStream每次读取一个数组长度的字节时,读取的中文字节数可能是奇数,也就是只读到中文的一半字节,出现乱码. 3.解决方法 一次读取所有字节,此方法不靠谱,因为不确定总字节数. 在输出时进行判断,遍历数组判断负数的个数,如果是奇数,说明读取到中文的一半字

  • Java FileInputStream与FileOutputStream使用详解

    什么是InputStream和OutputStream? InputStream和OutputStream是抽象类,是所有字节输入流和输出流的父类.这里,我们首先要分清楚两个概念: InputStream(输入流):输入流是用来读入数据的.- - - > > >读入 OutputStream(输出流):输出流是用来写出数据的.- - - > > >写出 文件输入流--FileInputStream FileInputStream 从文件系统中的某个文件中获得输入字节.

  • Java中Properties的使用详解

    Java中有个比较重要的类Properties(Java.util.Properties),主要用于读取Java的配置文件,各种语言都有自己所支 持的配置文件,配置文件中很多变量是经常改变的,这样做也是为了方便用户,让用户能够脱离程序本身去修改相关的变量设置.今天,我们就开始Properties的使用. Java中Properties的使用 Properties的文档说明: The Properties class represents a persistent set of propertie

  • Java 实现FTP服务实例详解

    Java 实现FTP服务实例详解 1.FTP简介 FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文传协议".用于Internet上的控制文件的双向传输.同时,它也是一个应用程序(Application).基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件.在FTP的使用当中,用户经常遇到两个概念:"下载"(Download)和"上传"(Upload)."

  • Java中对象的序列化详解及实例

     Java中对象的序列化详解及实例 把java对象转化为字节序列的过程称为对象的序列化. 把字节序列恢复为java对象的过程称为对象的反序列化. 对象序列化的用途: 1.把对象的字节序列永久的保存到硬盘上,通常存放在一个文件中 2.在网络上传送对象的字节序列化 void writeObject(Object obj) 方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中(将指定的对象写入 ObjectOutputStream.) void readObject()方法 从

  • 浅谈JAVA中输入输出流实例详解

    java语言的输入输出功能是十分强大而灵活的,美中不足的是看上去输入输出的代码并不是很简洁,因为你往往需要包装许多不同的对象.在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流....本文的目的是为大家介绍JAVA中输入输出流实例详解. 流的层次结构 定义:        java将读取数据对象成为输入流,能向其写入的对象叫输出流.结构图如下: 1.输入输出: 输入/输出(Input/Output)是指对某

  • Java对象Serializable接口实现详解

    这篇文章主要介绍了Java对象Serializable接口实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 导读 最近这段时间一直在忙着编写Java业务代码,麻木地搬着Ctrl-C.Ctrl-V的砖,在不知道重复了多少次定义Java实体对象时"implements Serializable"的C/V大法后,脑海中突然冒出一个思维(A):问了自己一句"Java实体对象为什么一定要实现Serializable接口呢?&qu

  • Java inputstream和outputstream使用详解

    计算机在进行I/O时都是以流的形式来进行,Java中所有流的相关操作的类,都继承自以下四个抽象类. 输入流 输出流 字节流 InputStream OutputStream 字符流 Reader Writer InPutStream的实现 import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java

  • Java NIO Buffer实现原理详解

    目录 1.Buffer的继承体系 2.Buffer的操作API使用案例 3.Buffer的基本原理 4.allocate方法初始化一个指定容量大小的缓冲区 5.slice方法缓冲区分片 6.只读缓冲区 7.直接缓冲区 8.内存映射 1.Buffer的继承体系 如上图所示,对于Java中的所有基本类型,都会有一个具体的Buffer类型与之对应,一般我们最经常使用的是ByteBuffer. 2.Buffer的操作API使用案例 举一个IntBuffer的使用案例: /** * @author csp

  • Java Zip文件读写操作详解

    输入流(读取): ZipInputStream是一种FileInputStream流,它可以直接读取Zip压缩包的内容: ┌───────────────────┐│    InputStream    │└───────────────────┘          ▲          │┌───────────────────┐│ FilterInputStream │└───────────────────┘          ▲          │┌──────────────────

随机推荐