本文摘要自Java I/O一书,选取中间精炼简单的部分,译成中文.
1. File stream
最常见的流通常与文件或者网络挂钩。
java.io.FileInputStream和 java.io.FileOutputStream 类,
是java.io.InputStream 和 java.io.OutputStream具体实现的子类。
但是,它并不管理文件,也不关心文件的可读可写或者移动一个文件到另一个地方。
如果你对文件管理感兴趣,参阅File(这个我们会在后文中说到)
2. 读文件
基本方法诸如:read( ), available( ), skip( ), 和close( ),都有
但是最常用的还是以下三个方法:
public FileInputStream(String fileName) throws IOException
public FileInputStream(File file) throws FileNotFoundException
public FileInputStream(FileDescriptor fdObj)
第一个方法,你可以使用相对路径。
文件名是平台独立的,所以硬编码一个文件名并非最佳实践。
所以最好使用File file参数的构造方法而非fileName的。
创建多级路径的FileInputStream可用如下方式完成:
File root = new File("/");
File dir = new File(root, "etc");
File child = new File(dir, "hosts");
FileInputStream fis = new FileInputStream(child);
但是这仍然假设了根路径是/
所以使用下面这一段代码会更好:
File[] roots = File.listRoots( )
File dir = new File(roots[0], "etc");
File child = new File(dir, "hosts");
FileInputStream fis = new FileInputStream(child);
如果试图读取一个不存在的文件,将会抛出FileNotFoundException,它是java.io.IOException的子类
3. 额外方法
文件输入流拥有一个InputStream中没有的方法,用于获得文件描述符
public final FileDescriptor getFD( ) throws IOException
它将返回一个java.io.FileDescriptor
可用于创建一个FileInputStream
可为一个文件创建多个FileInputStream,尽管很少有可能需要这样做。
读文件将不会对文件产生影响,但是写就不同了。
4. 写文件
继承自OutputStream的通用方法:write( ), flush( ), and close( )
主要方法:
public FileOutputStream(String filename) throws IOException
public FileOutputStream(File file) throws IOException
public FileOutputStream(FileDescriptor fd)
需要注意的是,这三个构造方法将会:
如果文件不存在,则创建它。
如果文件存在,则覆盖它。
如果你需要在末尾添加一些数据,使用:
public FileOutputStream(String name, boolean append) throws IOException