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
方法拒绝对文件描述符进行读取访问
-
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
方法。 -
-
抛出:
-
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
方法。 -
-
抛出:
-
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();
}
}
}