Java IO 节点流 FileInput/OutputStream

Java IO 节点流 FileInput/OutputStream

@author ixenos

节点流之 文件流



文件读写是最常见的I/O操作,通过文件流来连接磁盘文件,读写文件内容

1.文件的读写工作流程:

1)打开文件输入流或输出流

  FileInputStream实现读文件,调用FileInputStream的构造器可以打开一个文件输入流:

1 public FileInputStream(String fileName) throws FileNotFoundException //指定文件名
2 public FileInputStream(File file) throws FileNotFoundException //指定一个File对象
3 public FileInputStream(FileDescriptor fdObj) //需要一个文件描述符对象

  FileDescriptor http://www.fengfly.com/plus/view-214059-1.html

  如果试图在一个不存在的文件上打开一个文件输入流,该构造器将抛出异常FileNotFoundException,是IOException的子类

  最常用:通过文件名打开一个文件输出流 try{FileInputStream fin = new FileInputStream("Readme.txt");} catch(IOException e) {...}

2)文件读或写操作

  FileInputStream

1 public native int read() throws IOException
2 public int read(byte[] data) throws IOException
3 public int read(byte[] data, int offset, int length) throws IOException

  如果由于某种原因文件不可读,read方法将抛出IOException

3)关闭文件输入流或输出流

 1  ...
 2  finally{
 3      try{
 4          //由于在finally模块,如果文件不存在,也就没有流,所以要有一个空指针判断
 5          if(fin != null){
 6               fin.close();
 7           }
 8      }catch(Exception e){}
 9  }
10  ...
11 -------------------------------
12 由于close()也可能产生异常,代码较为冗杂
13 可以使用try-with-resources来自动关闭流 http://www.cnblogs.com/ixenos/p/5701679.html

4)FileInputStream对应的FileOutputStream实现了文件输出功能

1 public FileOutputStream(String name) throws FileNotFoundException
2 public FileOutputStream(String name, boolean append) throws FileNotFoundException

(1)调用第一个构造器时,如果name指定的文件不存在,将创建该文件,并同时建立一个输出流;如果存在,那么文件的内容将被覆盖

(2)调用第二个构造器时,通过第二个参数append指定是否对已存在的文件覆盖,如果append为true,那么将在文件尾端添加新内容,如果为false,则覆盖文件内容

(3)FileOutputStream的构造器可以创建一个新文件的同时,打开一个输出流进行写入,这是File对象的createNewFile()比不了的

write
public void write(byte[] b)
           throws IOException
    将 b.length 个字节从指定的 byte 数组写入此输出流。write(b) 的常规协定是:应该与调用 write(b, 0, b.length) 的效果完全相同。 

参数:
b - 数据。
抛出:
IOException - 如果发生 I/O 错误。

API-write1

write
public void write(byte[] b,
                  int off,
                  int len)
           throws IOException
    将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。write(b, off, len) 的常规协定是:将数组 b 中的某些字节按顺序写入输出流;元素 b[off] 是此操作写入的第一个字节,b[off+len-1] 是此操作写入的最后一个字节。
    OutputStream 的 write 方法对每个要写出的字节调用一个参数的 write 方法。建议子类重写此方法并提供更有效的实现。 

如果 b 为 null,则抛出 NullPointerException。 

如果 off 为负,或 len 为负,或者 off+len 大于数组 b 的长度,则抛出 IndexOutOfBoundsException。 

参数:
b - 数据。
off - 数据中的初始偏移量。
len - 要写入的字节数。 

API-OutputStream-write

API-write

时间: 2024-08-29 08:15:59

Java IO 节点流 FileInput/OutputStream的相关文章

Java IO 过滤流 字节缓冲流 BufferedInput/OutputStream

Java IO 过滤流 字节缓冲流 BufferedInput/OutputStream @author ixenos 概念 BufferedInput/OutputStream是实现缓存的过滤流,他们分别是FilterInput/OutputStream的子类. BufferedInputStream工作流程 stream-->buf--read buf-->I 1.当一个BufferedInputStream被创建时,一个内部的缓冲区 byte[] buf = new byte[size]

Java IO 转换流 字节转字符流

Java IO 转换流 字节转字符流 @author ixenos 字节流 输入字节流:---------| InputStream 所有输入字节流的基类. 抽象类.------------| FileInputStream 读取文件的输入字节流.------------| BufferedInputStream 缓冲输入字节流. 该类内部其实就是维护了一个8kb(8192b)字节数组而已. 该类出现的目的是为了提高读取文件数据的效率. 输出字节流:---------| OutputStream

JavaLearning:JAVA IO Piped流

package org.fun.io; import java.io.IOException; import java.io.PipedInputStream; import java.io.PipedOutputStream; class Send implements Runnable{ private PipedOutputStream output=null; public Send(){ this.output=new PipedOutputStream(); } public Pip

Java IO 理解流的概念

Java IO 理解流的概念 @author ixenos 在理解流时首先理解以下概念 1.流的来源和去向一般在构造器指出 2.方法中的形参一般是将流输出到某个位置,读取时从流读出数据(来自流)送到位置上,输出时将所要输出的数据(来自我)送到位置上

Java IO字符流与字节流

一.基本概念 流:从一端流向另一端,从源头到目的地. 始终与程序为中心,都是程序与文件|数组|网络连接|数据库进行操作. 二.IO流分类 1.流向: 输入流和输出流 2.数据: 字节流:二进制,可以处理文本文件,视频,音频等 . 字符流:文本文件,只能处理纯文本,全款为可见字符(.txt..html). 3.功能: 节点:包裹源头 处理:增强功能,提高性能. 三.字节流与字符流 1.字节流 输入流:InputStream int read(byte[] b) int read(byte[] b,

Java IO包装流如何关闭?

http://www.cnblogs.com/qqzy168/p/3670915.html —————————————————————————————————————————————————————— 问题: (1)JAVA的IO流使用了装饰模式,关闭最外面的流的时候会自动调用被包装的流的close()方吗? (2)如果按顺序关闭流,是从内层流到外层流关闭还是从外层到内存关闭? 问题(1)解释: 如下例子代码: FileInputStream is = new FileInputStream("

Java: IO 字符流

FileInputStream和FileOutputStream分别是InputStream和OutputStream的子类,都是字节流.下面例子中有三个方法可以读写字节流: 1.一个一个的 2.一组一组的,可以自定义字节数组的长度 3.使用available方法,可以返回目标文件的长度从而利用该特性建立一个刚刚好长度的字节数组.但该方法有使用风险,例如目标文件过大,一个电影或者一个大数据文件,则会导致超过虚拟机内存的大小,从而出现错误.所以使用该方法要评估风险,如果可以确定目标是小文件,则可以

Java IO文件流

package com.zb.io.test; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.F

JAVA的节点流和处理流

节点流:可以从或向一个特定的地方(节点)读写数据.如FileReader. 处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写.如BufferedReader.处理流的构造方法总是要带一个其他的流对象做参数.一个流对象经过其他流的多次包装,称为流的链接. JAVA常用的节点流: 文 件 FileInputStream FileOutputStrean FileReader FileWriter 文件进行处理的节点流. 字符串 StringReader StringWri