I/O3——文件输入/输出流

Java程序运行期间,大部分数据都在内存中进行操作,当程序结束或关闭时,,这些数据就会消失。如果需要将数据永久保存,可使用文件输入/输出流与指定的文件建立连接,将需要的数据永久保存到文件中。

FileInputStream类

FileInputStream类是继承了InputStream类,该类提供了基本的把文件中信息写入到数据流的能力。

FileInputStream类常用的构造方法如下:


public FileInputStream(String name)
                throws FileNotFoundException
通过打开一个到实际文件的连接来创建一个  FileInputStream,该文件通过文件系统中的路径名  name 指定。创建一个新  FileDescriptor 对象来表示此文件连接。

首先,如果有安全管理器,则用 name 作为参数调用其 checkRead 方法。

如果指定文件不存在,或者它是一个目录,而不是一个常规文件,抑或因为其他某些原因而无法打开进行读取,则抛出 FileNotFoundException

参数:
name - 与系统有关的文件名。
抛出:
FileNotFoundException - 如果该文件不存在,或者它是一个目录,而不是一个常规文件,抑或因为其他某些原因而无法打开进行读取。
SecurityException - 如果存在安全管理器,且其  checkRead 方法拒绝对文件进行读取访问。


public FileInputStream(File file)
                throws FileNotFoundException
通过打开一个到实际文件的连接来创建一个  FileInputStream,该文件通过文件系统中的  File 对象  file 指定。创建一个新  FileDescriptor 对象来表示此文件连接。

首先,如果有安全管理器,则用 file 参数表示的路径作为参数调用其 checkRead 方法。

如果指定文件不存在,或者它是一个目录,而不是一个常规文件,抑或因为其他某些原因而无法打开进行读取,则抛出 FileNotFoundException

参数:
file - 为了进行读取而打开的文件。
抛出:
FileNotFoundException - 如果该文件不存在,或者它是一个目录,而不是一个常规文件,抑或因为其他某些原因而无法打开进行读取。
SecurityException - 如果存在安全管理器,且其  checkRead 方法拒绝对文件进行读取访问。

public FileInputStream(FileDescriptor fdObj)
通过使用文件描述符  fdObj 创建一个  FileInputStream,该文件描述符表示到文件系统中某个实际文件的现有连接。

首先,如果有安全管理器,则用文件描述符 fdObj 作为参数调用其 checkRead 方法,以查看它是否可以读取该文件描述符。如果拒绝对该文件描述符进行读取访问,则抛出SecurityException

如果 fdObj 为 null,则抛出 NullPointerException

参数:
fdObj - 为了进行读取而打开的文件描述符。
抛出:
SecurityException - 如果存在安全管理器,且其  checkRead 方法拒绝对文件描述符进行读取访问
FileInputStream类的方法

public int read()
         throws IOException
从此输入流中读取一个数据字节。如果没有输入可用,则此方法将阻塞。

指定者:
类  InputStream 中的  read
返回:
下一个数据字节;如果已到达文件末尾,则返回  -1
抛出:
IOException - 如果发生 I/O 错误。

public int read(byte[] b)
         throws IOException
从此输入流中将最多  b.length 个字节的数据读入一个 byte 数组中。在某些输入可用之前,此方法将阻塞。

覆盖:
类  InputStream 中的  read
参数:
b - 存储读取数据的缓冲区。
返回:
读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回  -1
抛出:
IOException - 如果发生 I/O 错误。

public int read(byte[] b,
                int off,
                int len)
         throws IOException
从此输入流中将最多  len 个字节的数据读入一个 byte 数组中。如果  len 不为 0,则在输入可用之前,该方法将阻塞;否则,不读取任何字节并返回  0

覆盖:
类  InputStream 中的  read
参数:
b - 存储读取数据的缓冲区。
off - 目标数组  b 中的起始偏移量。
len - 读取的最大字节数。
返回:
读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回  -1
抛出:
NullPointerException - 如果  b 为  null
IndexOutOfBoundsException - 如果  off 为负、 len 为负,或者  len 大于  b.length - off

public long skip(long n)
          throws IOException
从输入流中跳过并丢弃  n 个字节的数据。

出于各种原因,skip 方法最终跳过的字节数可能更少一些,甚至可能为 0。如果 n 为负,则抛出 IOException,即使 InputStream 超类的 skip 方法在这种情况下没有执行任何操作。返回实际跳过的字节数。

此方法跳过的字节可能多于底层实现文件中剩余的字节。这不会产生异常,并且跳过的字节数可能包括底层实现文件的 EOF(文件结束符)之后的一些字节数。如果试图在跳过末尾之后读取流,那么会返回 -1(指示文件结束)。

覆盖:
类  InputStream 中的  skip
参数:
n - 要跳过的字节数。
返回:
实际跳过的字节数。
抛出:
IOException - 如果 n 为负,如果该流不支持查找操作,或者发生 I/O 错误

public int available()
              throws IOException
返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取(或跳过)的估计剩余字节数。下一次调用可能是同一个线程,也可能是另一个线程。一次读取或跳过此数量个字节不会发生阻塞,但读取或跳过的字节可能小于该数。

在某些情况下,非阻塞的读取(或跳过)操作在执行很慢时看起来受阻塞,例如,在网速缓慢的网络上读取大文件时。

覆盖:
类  InputStream 中的  available
返回:
可以不受阻塞地从此输入流中读取(或跳过)的估计剩余字节数。
抛出:
IOException - 如果此文件输入流已通过调用  close 关闭,或者发生 I/O 错误。

public void close()
           throws IOException
关闭此文件输入流并释放与此流有关的所有系统资源。

如果此流有一个与之关联的通道,则关闭该通道。

指定者:
接口  Closeable 中的  close
覆盖:
类  InputStream 中的  close
抛出:
IOException - 如果发生 I/O 错误。

public final FileDescriptor getFD()
                           throws IOException
返回表示到文件系统中实际文件的连接的  FileDescriptor 对象,该文件系统正被此  FileInputStream 使用。

返回:
与此流有关的文件描述符对象。
抛出:
IOException - 如果发生 I/O 错误。

public FileChannel getChannel()
返回与此文件输入流有关的唯一  FileChannel 对象。

所返回通道的初始 position 将等于到目前为止从文件中读取的字节数。从此流中读取的字节会使通道的位置递增。显式地或通过读取来更改通道的位置会更改此流的文件位置。

返回:
与此文件输入流有关的文件通道
从以下版本开始:
1.4

protected void finalize()
                 throws IOException
确保在不再引用文件输入流时调用其  close 方法。

覆盖:
类  Object 中的  finalize
抛出:
IOException - 如果发生 I/O 错误。

具体了解请戳点击打开链接

FileOutputStream类

FileOutputStream类是OutputStream类的子类。该类提供了基本的把数据流中的信息写入到目标文件的能力。

FileOutputStream类的构造方法

public FileOutputStream(File file)
                 throws FileNotFoundException
创建一个向指定  File 对象表示的文件中写入数据的文件输出流。创建一个新  FileDescriptor 对象来表示此文件连接。

首先,如果有安全管理器,则用 file 参数表示的路径作为参数来调用 checkWrite 方法。

如果该文件存在,但它是一个目录,而不是一个常规文件;或者该文件不存在,但无法创建它;抑或因为其他某些原因而无法打开,则抛出 FileNotFoundException

参数:
file - 为了进行写入而打开的文件。
抛出:
FileNotFoundException - 如果该文件存在,但它是一个目录,而不是一个常规文件;或者该文件不存在,但无法创建它;抑或因为其他某些原因而无法打开
SecurityException - 如果存在安全管理器,且其  checkWrite 方法拒绝对文件进行写入访问。
 

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

首先,如果有安全管理器,则用 file 参数表示的路径作为参数来调用 checkWrite 方法。

如果该文件存在,但它是一个目录,而不是一个常规文件;或者该文件不存在,但无法创建它;抑或因为其他某些原因而无法打开它,则抛出 FileNotFoundException

参数:
file - 为了进行写入而打开的文件。
append - 如果为  true,则将字节写入文件末尾处,而不是写入文件开始处
抛出:
FileNotFoundException - 如果该文件存在,但它是一个目录,而不是一个常规文件;或者该文件不存在,但无法创建它;抑或因为其他某些原因而无法打开它
SecurityException - 如果存在安全管理器,且其  checkWrite 方法拒绝对文件进行写入访问。
从以下版本开始:
1.4
public FileOutputStream(FileDescriptor fdObj)
创建一个向指定文件描述符处写入数据的输出文件流,该文件描述符表示一个到文件系统中的某个实际文件的现有连接。

首先,如果有安全管理器,则用文件描述符 fdObj 参数作为参数来调用 checkRead 方法。

参数:
fdObj - 为进行写入而打开的文件描述符
抛出:
SecurityException - 如果存在安全管理器,且其  checkWrite 方法拒绝对文件描述符进行写入访问

FileOutputStream方法

public void write(int b)
           throws IOException
将指定字节写入此文件输出流。实现  OutputStream 的  write 方法。

指定者:
类  OutputStream 中的  write
参数:
b - 要写入的字节。
抛出:
IOException - 如果发生 I/O 错误。
public void write(byte[] b)
           throws IOException
将  b.length 个字节从指定 byte 数组写入此文件输出流中。

覆盖:
类  OutputStream 中的  write
参数:
b - 数据。
抛出:
IOException - 如果发生 I/O 错误。
public void write(byte[] b,
                  int off,
                  int len)
           throws IOException
将指定 byte 数组中从偏移量  off 开始的  len 个字节写入此文件输出流。

覆盖:
类  OutputStream 中的  write
参数:
b - 数据。
off - 数据中的起始偏移量。
len - 要写入的字节数。
抛出:
IOException - 如果发生 I/O 错误。
public void close()
           throws IOException
关闭此文件输出流并释放与此流有关的所有系统资源。此文件输出流不能再用于写入字节。

如果此流有一个与之关联的通道,则关闭该通道。

指定者:
接口  Closeable 中的  close
覆盖:
类  OutputStream 中的  close
抛出:
IOException - 如果发生 I/O 错误。
public final FileDescriptor getFD()
                           throws IOException
返回与此流有关的文件描述符。

返回:
表示到文件系统中的某个文件的连接的  FileDescriptor 对象,该文件系统正被此  FileOutputStream 对象使用。
抛出:
IOException - 如果发生 I/O 错误。
public FileChannel getChannel()
返回与此文件输出流有关的唯一  FileChannel 对象。

所返回通道的初始 java.nio.channels.FileChannel#position()position 将等于到目前为止从文件中读取的字节数,除非此流处于挂起模式,在这种情况下,它将等于文件的大小。将字节写入此流中会使通道的位置相应地增加。显式地或通过写入来更改通道的位置会更改此流的文件位置。

返回:
与此文件输出流有关的文件通道
从以下版本开始:
1.4
protected void finalize()
                 throws IOException
清理到文件的连接,并确保在不再引用此文件输出流时调用此流的  close 方法。

覆盖:
类  Object 中的  finalize
抛出:
IOException - 如果发生 I/O 错误。



具体了解请戳点击打开链接


实例

package FileIO;
import java.io.*;//导入包
public class FileTest3 {
public static void main(String[] args) {
File file=new File("word.txt");//创建文件对象
try{
FileOutputStream out=new FileOutputStream(file);//创建FileOutputStream对象
byte mybyte[]="我有一头小毛驴,我从来也不骑。".getBytes();//创建数组
out.write(mybyte);//写入到文件中
out.close();//将流关闭
}catch(Exception e){//处理异常
System.out.println(e.getMessage());
}
try{
FileInputStream in=new FileInputStream(file);//创建FileInputStream对象
byte b[]=new byte[1024];//创建一个新的数组
int len=in.read(b);//读取文件中的信息
System.out.println("文中的信息是:"+new String(b,0,len));
in.close();//关闭
}catch(Exception e){//处理异常
e.printStackTrace();
}
}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值