开课吧Java课程之详解文件输出流FileInputStream

FileInputStream(文件输入流)
FileInputStream 类创建一个能从文件读取字节的InputStream 类,它的两个常用的构造函数如下:

FileInputStream(String filepath) 
FileInputStream(File fileObj) 

它们都能引发FileNotFoundException异常。这里,filepath 是文件的全称路径,fileObj是描述该文件的File对象。下面的例子创建了两个使用同样磁盘文件且各含一个上述构造函数的FileInputStreams类:

FileInputStream f0 = new FileInputStream("/autoexec.bat") 
File f = new File("/autoexec.bat"); 
FileInputStream f1 = new FileInputStream(f); 

尽管第一个构造函数可能更常用到,第二个构造函数允许在把文件赋给输入流之前用File方法更进一步检查文件。当一个FileInputStream被创建时,它可以被公开读取。

FileInputStream重载了抽象类InputStream的六个方法,mark( )和reset( )方法不被重载,任何关于使用FileInputStream的reset()尝试都会生成IOException异常。

下面的例题说明了怎样读取单个字节、字节数组以及字节数组的子界。它同样阐述了怎样运用available( )判定剩余的字节个数及怎样用skip( )方法跳过不必要的字节。该程序读取它自己的源文件,该源文件必定在当前目录中。

// Demonstrate FileInputStream. 
import java.io.*; 
class FileInputStreamDemo { 
 public static void main(String args[]) throws Exception { 
 int size; 
 InputStream f = 
 new FileInputStream("FileInputStreamDemo.java"); 
 System.out.println("Total Available Bytes: " + 
 (size = f.available())); 
 int n = size/40; 
 System.out.println("First " + n + 
 " bytes of the file one read() at a time"); 
 for (int i=0; i < n; i++) { 
 System.out.print((char) f.read()); 
 } 
 System.out.println("\nStill Available: " + f.available()); 
 System.out.println("Reading the next " + n + 
 " with one read(b[])"); 
 byte b[] = new byte[n]; 
 if (f.read(b) != n) { 
 System.err.println("couldn't read " + n + " bytes."); 
 } 
 System.out.println(new String(b, 0, n)); 
 System.out.println("\nStill Available: " + (size = f.available())); 
 System.out.println("Skipping half of remaining bytes with skip()"); 
 f.skip(size/2); 
 System.out.println("Still Available: " + f.available()); 
 System.out.println("Reading " + n/2 + " into the end of array"); 
 if (f.read(b, n/2, n/2) != n/2) { 
 System.err.println("couldn't read " + n/2 + " bytes."); 
 } 
 System.out.println(new String(b, 0, b.length)); 
 System.out.println("\nStill Available: " + f.available()); 
 f.close(); 
 } 
} 

下面是该程序的输出:

Total Available Bytes: 1433 
First 35 bytes of the file one read() at a time 
// Demonstrate FileInputStream. 
im 
Still Available: 1398 
Reading the next 35 with one read(b[]) 
port java.io.*; 
class FileInputS 
Still Available: 1363 
Skipping half of remaining bytes with skip() 
Still Available: 682 
Reading 17 into the end of array 
port java.io.*; 
read(b) != n) { 
S 
Still Available: 665 

这个有些刻意创作的例子说明了怎样读取数据的三种方法,怎样跳过输入以及怎样检查流中可以获得数据的数目。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值