`
newleague
  • 浏览: 1508582 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

《Java JDK6学习笔记》-FileOutputStream&FileInputStream

阅读更多

http://book.51cto.com/art/200812/101093.htm

 

(madp

InputStream:

int read(byte[] b)
          从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。

 

OutputStream:

void write(byte[] b)
          将 b.length 个字节从指定的 byte 数组写入此输出流。

 

)

 

 

 

14.2.2 FileInputStream和FileOutputStream

java.io.FileInputStream是InputStream的子类。从开头File名称上就可以知道,FileInputStream与从指定的文件中读取数据至目的地有关。而java.io.FileOutputStream是OutputStream的子类,顾名思义,FileOutputStream主要与从来源地写入数据至指定的文件中有关。

当建立一个FileInputStream或FileOutputStream的实例时,必须指定文件位置及文件名称,实例被建立时文件的流就会开启;而不使用流时,必须关闭文件流,以释放与流相依的系统资源,完成文件读/写的动作。

FileInputStream可以使用read()方法一次读入一个字节,并以int类型返回,或者是使用read()方法时读入至一个byte数组,byte数组的元素有多少个,就读入多少个字节。在将整个文件读取完成或写入完毕的过程中,这么一个byte数组通常被当作缓冲区,因为这么一个byte数组通常扮演承接数据的中间角色。

范例14.5是使用FileInputStream与FileOutputStream的一个例子。程序可以复制文件,它会先从来源文件读取数据至一个byte数组中,然后再将byte数组的数据写入目的文件。

范例14.5  FileStreamDemo.java

 

package onlyfun.caterpillar;
import java.io.*;
public class FileStreamDemo {
public static void main(String[] args) {
try {
byte[] buffer = new byte[1024];

 

// 来源文件
FileInputStream fileInputStream =
new FileInputStream(new File(args[0]));
// 目的文件
FileOutputStream fileOutputStream =
new FileOutputStream(new File(args[1]));

 

// available()可取得未读取的数据长度
System.out.println("复制文件:" +
fileInputStream.available() + "字节");

 

while(true) {
if(fileInputStream.available() < 1024) {
// 剩余的数据比1024字节少
// 一位一位读出再写入目的文件
int remain = -1;
while((remain = fileInputStream.read())
!= -1) {
fileOutputStream.write(remain);
}
break;
}
else {
// 从来源文件读取数据至缓冲区
fileInputStream.read(buffer);
// 将数组数据写入目的文件
fileOutputStream.write(buffer);
}
}

 

// 关闭流
fileInputStream.close();
fileOutputStream.close();

 

System.out.println("复制完成");
}
catch(ArrayIndexOutOfBoundsException e) {
System.out.println(
"using: java FileStreamDemo src des");
e.printStackTrace();
}
catch(IOException e) {
e.printStackTrace();
}
}
}

程序中示范了两个read()方法,一个方法可以读入指定长度的数据至数组,另一个方法一次可以读入一个字节。每次读取之后,读取的光标都会往前进,如果读不到数据则返回-1,使用available()方法获得还有多少字节可以读取。除了使用File来建立FileInputStream、FileOutputStream的实例之外,也可以直接使用字符串指定路径来建立。

// 来源文件
FileInputStream fileInputStream =
new FileInputStream(args[0]);
// 目的文件
FileOutputStream fileOutputStream =
new FileOutputStream(args[1]);

在不使用文件流时,记得使用close()方法自行关闭流,以释放与流相依的系统资源。一个执行的结果范例如下,它将FileDemo.java复制为FileDemo.txt:

java onlyfun.caterpillar.FileStreamDemo FileDemo.java FileDemo.txt
复制文件:1723字节
复制完成

FileOutputStream默认会以新建文件的方式来开启流。如果指定的文件名称已经存在,则原文件会被覆盖;如果想以附加的模式来写入文件,则可以在构建FileOutputStream实例时指定为附加模式。例如:

FileOutputStream fileOutputStream =
new FileOutputStream(args[1], true);

构建方法的第二个append参数如果设置为true,在开启流时如果文件不存在则会新建一个文件,如果文件存在就直接开启流,并将写入的数据附加至文件末端。

虽然我一向不喜欢使用过长的范例来作程序示范(也不喜欢看很长的范例),不过本章的范例与其他各章的比起来相对长了一些,我会在程序中多用注释解释程序的逻辑。因为解释输入/输出操作最好的方式,是呈现一个具实用性的范例,本章的范例除了练习的作用之外,日后需要某些输入/输出功能时,也可以来参考看看如何实现。

分享到:
评论

相关推荐

    Java JDK 6学习笔记_pdf版(附课本代码)

    这份“Java JDK 6学习笔记”涵盖了从基础到高级的各种主题,是Java初学者和进阶者的重要参考资料。以下是笔记中可能包含的一些关键知识点: 1. **安装与配置**:介绍如何在不同操作系统(如Windows、Linux和Mac OS...

    Java JDK 7学习笔记 完整扫描版

    **Java JDK 7学习笔记概述** Java JDK 7(Java Development Kit 7)是Java编程语言的一个重要版本,由Sun Microsystems(后被Oracle公司收购)开发,并于2011年7月28日正式发布。这个版本引入了一系列新特性、改进...

    Java JDK 6学习笔记——ppt简体版

    Java JDK 6学习笔记——PPT简体版是针对初学者和有经验的开发者们的一份宝贵资源,它深入浅出地介绍了Java编程语言的核心概念和技术。这份笔记以PPT的形式呈现,使得学习过程更加直观易懂,适合课堂教学或自我学习。...

    Java JDK 6学习笔记——ppt

    Java JDK 6学习笔记——PPT简体版是针对初学者和有经验的开发者们的一份宝贵资源,它深入浅出地介绍了Java编程语言的核心概念和技术。这份资料以PPT的形式呈现,使得学习过程更加直观易懂,同时包含了课程中的源代码...

    良葛格Java JDK 5.0学习笔记

    6. **输入/输出流**:Java的I/O流系统是处理数据输入和输出的关键,书中会介绍流的分类、层次结构,以及如何使用FileInputStream、FileOutputStream、BufferedReader、BufferedWriter等类进行文件操作。 7. **多...

    JavaJDK6学习教程ppt简体中文版附课本代码

    在"Java JDK 6学习笔记——ppt简体版"中,你将系统地了解到以下几个关键知识点: 1. **基础语法**:包括数据类型、变量、控制结构(如if、switch、for、while循环)、方法、类与对象等Java语言的基本元素。 2. **...

    Java+JDK+6学习笔记课件林学良.rar

    Java JDK 6学习笔记课件是由知名讲师林学良教授的一套系统性的Java编程教程,主要针对初学者和有一定基础的开发者,旨在帮助他们深入理解Java语言和JDK 6的相关特性。本教程覆盖了Java语言的基础语法、面向对象编程...

    javajdk源码学习-java-source-code:JavaJDK源代码学习笔记

    这个学习笔记将主要聚焦于Java的核心库和虚拟机实现,通过分析源代码,我们可以更清晰地了解Java的内部机制。 首先,Java JDK源码包含了Java语言的基础类库,如`java.lang`, `java.util`, `java.io`等包,这些包...

    王者归来之良葛格java学习笔记JDK6课件和课本代码.rar

    【Java学习笔记与JDK6】是针对初学者和进阶者的重要资源,由知名IT作者单兴华编写的“王者归来之良葛格”系列教程。本压缩包包含丰富的Java编程教学材料,旨在帮助用户深入理解JDK6版本中的核心概念和技术。以下是...

    java学习笔记JDK6课件之十九

    【Java学习笔记JDK6课件之十九】深入解析 在这一章节中,我们将探讨Java编程中的文本编辑器实现,以及产品生命周期的概念。这是一份新手入门的学习资料,非常适合初学者掌握Java SE(标准版)环境下的Swing库,以及...

    Java学习笔记(必看经典).doc

    6. **输入/输出流**:Java提供了强大的I/O流系统,支持文件读写、网络通信和数据序列化等操作,如FileInputStream和FileOutputStream用于文件操作,Socket和ServerSocket用于网络编程。 7. **多线程**:Java内置了...

    Java开发学习笔记

    Java开发学习笔记主要针对的是初学者,旨在帮助他们掌握Java编程的基础知识。下面将详细讲解Java开发中的核心概念和步骤。 一、Java环境变量设置 在开始Java编程之前,我们需要安装Java Development Kit (JDK)并...

    java全套笔记 来自狂神说java笔录.zip

    5. **输入/输出流**:学习如何使用FileInputStream、FileOutputStream、BufferedReader、BufferedWriter等进行文件操作。 6. **多线程**:掌握Thread类和Runnable接口,线程同步机制,如synchronized关键字、wait()...

    java学习1-3课笔记

    开始学习Java,你需要安装Java Development Kit (JDK),它包含了编译器javac和解释器java等工具。还要配置好系统环境变量,如JAVA_HOME、PATH和CLASSPATH,以确保系统能找到Java的相关命令。 3. **基础语法**: -...

    Java学习笔记全部课件和源代码

    "Java学习笔记全部课件和源代码"是一个针对初学者的资源包,它包含了一系列关于Java编程的学习材料和实例代码,旨在帮助新手快速掌握Java语言的基础和实践应用。 在Java学习的初期,理解基础概念至关重要。这包括...

    java基础的详细案例笔记

    7. **输入/输出流**:Java的I/O流用于读写文件和网络数据,笔记可能涵盖了FileInputStream、FileOutputStream、BufferedReader、BufferedWriter等基本流的使用。 8. **集合框架**:如ArrayList、LinkedList、...

    非常详细javaSE学习笔记.rar

    6. **输入输出(I/O)**:包括System.in, System.out.println, 文件读写,流的概念,以及FileInputStream, FileOutputStream, BufferedReader, BufferedWriter等类的使用。 7. **多线程**:Java内置的Thread类,...

    最全的java学习笔记(必看).pdf

    Java I/O流(如RandomAccessFile、FileInputStream、FileOutputStream)为程序读写文件提供了方法。Java还提供了对网络通信的支持,比如Socket编程。 Java中的线程是程序执行流的最小单位,提供并行计算的能力。...

    良葛格老师的java学习笔记

    良葛格老师的Java学习笔记是针对初学者的一份宝贵资料,旨在帮助他们快速掌握Java编程的基础,并深入理解关键概念。 笔记内容可能涵盖以下几个方面: 1. **Java基础知识**:包括Java的历史、特点,以及安装JDK...

Global site tag (gtag.js) - Google Analytics