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

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

  1. Java IO 节点流 ByteArrayInput/OutputStream

    Java IO 节点流 ByteArrayInput/OutputStream @author ixenos ByteArrayInputStream 包含一个内部缓冲区(字节数组byte[]),该缓 ...

  2. Java IO 过滤流 BufferedInput/OutputStream

    Java IO 过滤流 BufferedInput/OutputStream @author ixenos 概念 BufferedInput/OutputStream是实现缓存的过滤流,他们分别是Fi ...

  3. java io 节点流和处理流

    JAVA IO操作总结:节点流和处理流 JAVA IO操作总结--节点流和处理流  按照流是否直接与特定的地方(如磁盘.内存.设备等)相连,分为节点流和处理流两类. 节点流:可以从或向一个特定的地方( ...

  4. Java Io 字符流

    Java Io 字符流包含: 1. InputStreamReader  它是由byte流解析为char流,并且按照给定的编码解析. 2. OutputStreamWrite  它是char流到byt ...

  5. Java IO 转换流 字节转字符流

    Java IO 转换流 字节转字符流 @author ixenos 字节流 输入字节流:---------| InputStream 所有输入字节流的基类. 抽象类.------------| Fil ...

  6. Java - IO 内存流和打印流

    IO 内存流和打印流操作 字符编码 计算机中所有的信息组成都是二进制数据,所有能够描述的中文文字都是经过处理后的结果:所有的语言文字都会使用编码来进行描述,例如:ASCII码 常见编码 GBK/GB2 ...

  7. Java IO 嵌套流、文本的输入输出和存储

    Java IO 嵌套流.文本的输入输出和存储 @author ixenos 1.   组合流过滤器(嵌套流) a)    跨平台文件分割符:常量字符串 java.io.File.seperator 等 ...

  8. Java IO 理解流的概念

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

  9. Java IO: 字符流的Buffered和Filter

    作者: Jakob Jenkov  译者: 李璟(jlee381344197@gmail.com) 本章节将简要介绍缓冲与过滤相关的reader和writer,主要涉及BufferedReader.B ...

随机推荐

  1. [转]Numpy使用MKL库提升计算性能

    from:http://unifius.wordpress.com.cn/archives/5 系统:Gentoo Linux (64bit, Kernel 3.7.1)配置:Intel(R) Cor ...

  2. nginx使用openssl的证书-泛解析

    一.需求分析 我们公司测试环境,域名更换,原来的*.dev.devbao.cn   变为   *.dev.vdai.cn  ,此处的*表示多个二级域名,导致原来为dev.devbao.cn制作的ssl ...

  3. 第一百二十二节,JavaScript表单处理

    JavaScript表单处理 学习要点: 1.表单介绍 2.文本框脚本 3.选择框脚本 为了分担服务器处理表单的压力,JavaScript提供了一些解决方案,从而大大打破了处处依赖服务器的局面. 一. ...

  4. ES 6 : 数组的扩展

    1.Array.from() Array.from方法用于将两类对象转为真正的数组:类似数组的对象和可遍历(iterable)对象. 下面是一个类似数组的对象,Array.from将它转为真正的数组. ...

  5. Asp.Net BulletedList使用及详解

    BulletedList使用及详解   文章来源:www.cnblogs.com/xiohao/archive/2013/10/09/3359263.html BulletedList是一个让你轻松在 ...

  6. centos-mysql 安装

    初学者自编文档,如有错误,请指出,具体命令就不阐述了,不明白 度娘吧! nginx我是编译安装在服务器上 和其他安装应该会有区别 安装路径路径:/usr/local/ 安装包存放位置:/home/ap ...

  7. winform窗体对象 单例模式与泛型结合

    实现弹出窗体对象的单例模式  结合泛型后,可以用于所有窗体的弹出操作 public class BaseFrm<T> where T : Form, new() { //定义一个静态的,私 ...

  8. Java多线程和死锁

    一 .多线程: 售票窗口简单实例: public class SaleTicket { public static class Sale implements Runnable{ ; // @Over ...

  9. tableView区头不显示

    不知道什么原因 如果设置tableView的样式为Group 则必须写代理 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; co ...

  10. HDU 2177 取(2堆)石子游戏 (威佐夫博弈)

    题目思路:威佐夫博弈: 当当前局面[a,b]为奇异局时直接输出0 否则: 1.若a==b,输出(0 0): 2.将a,b不停减一,看能否得到奇异局,若有则输出: 3.由于 ak=q*k(q为黄金分割数 ...