FileInputStream类
如果用户的文件读取需求比较简单,那么用户可以使用FileInputStream类,该类是从InputStream中派生出来的简单输入类,该类的实例方法都是从InputStream类继承来的。
FileInputStream类的构造方法如下:
//使用给定的文件名name创建一个FilenameStream对象
FileInputStream(String name)
//使用File对象创建FileInputStream对象
FileInputStream(File file)
1、使用文件输入流读取文件
文件输入流(输入流的子类)提供对文件的存取。为了读取文件,使用文件输入流构造方法来打开一个到达该文件的输入流(源就是这个文件,输入流指向这个文件)
比如,读取一个abc.dat文件,建立一个文件输入流对象:
FileInputStream istream=new FileInputStream("abc.dat");
或
File f=new File("abc.dat");
FileInputStream istream=new FileInputStream(f);
2、从输入流中读取字节
输入流的目的是提供通往数据的通道,程序可以通过这个通道读取数据。read方法给程序提供一个从输入流中读取数据的基本方法。
read的格式如下:
int read()
read方法从输入流中顺序读取源中的单个字节数据,该方法返回字节值(0~255直接的一个整数),如果达到源的末尾,该方法返回 -1.
read方法的其他形式:
int read(byte b[]);
int read(byte b[], int off,int len);
其中,off参数指定read方法把数据存放在字节数组b中的什么地方,len参数指定该方法将读取的最大字节数。
FileInputStream流顺序地读取文件,只要不关闭流,每次调用read方法就顺序地读取源中其余内容,直到源的末尾或流被关闭。
3、关闭流
虽然java在程序结束时自动关闭所有打开的流,但是当我们使用完流后,显示地关闭任何打开的流仍是一个良好的习惯。一个被打开的流可能会用尽系统资源,这取决于平台和实现。如果没有关闭那些被打开的流,那么在这个或另一个程序试图打开另一个流时,这些资源可能得不到。
关闭输出流的另一个原因是把该流缓冲区的内容冲洗掉(通常冲洗到磁盘文件上)。在操作系统把出现所写的输出流上的那些字节保存到磁盘上之前,内容有时被存放在内存缓冲区,通过调用close()方法,可以保证操作系统把流缓冲区的内容写到它的目的地。
import java.io.File;
import java.io.FileInputStream;
public class FileDemo3 {
public static void main(String[] args) {
int b;
byte a[]=new byte[25];
try {
File f=new File("E:/FileIO","E.java");
FileInputStream in=new FileInputStream(f);
while((b=in.read(a,0,25))!=-1){
String s=new String(a,0,25);
System.out.println(s);
}
in.close();
} catch (Exception e) {
System.out.println("File read Error"+e);
}
}
}
FileOutputStream类
FileOutputStream类提供了基本的文件写入能力。除了从OutputStream类继承来的方法以外,FileOutputStream类还有两个构造方法:
//使用给定的文件名name创建一个FileOutputStream对象
FileOutputStream(String name)
//使用file对象创建FileOutputStream对象
FileOutputStream(File file)
可以使用write方法把字节写入到输出流的目的地。
write的格式如下:
public void write(byte b[])
public void write(byte b[],int off,int len)
其中,从给定字节数组中起始于偏移量off处写len个字节到输入流,参数b是存放了数据的字节数组;off是数据的起始偏移量;len是要输出的字节数。
FileOutputStream流顺序地写文件,只要不关闭流,每次调用write方法就顺序地向输出流写入内容,直到流被关闭。
从键盘输入一行文本并将其存储到 a.txt中。
import java.io.FileOutputStream;
import java.io.IOException;
public class FileDemo4 {
public static void main(String[] args) {
int b;
byte buff[]=new byte[100];
try {
System.out.println("输入一行文本,并存入磁盘");
b=System.in.read(buff);//从键盘输入的字符存入buffer
FileOutputStream writefile=new FileOutputStream("e:/FileIO/a.txt");
writefile.write(buff,0,b);//通过流把buffer写入到文件a.txt
} catch (IOException e) {
System.out.println("Error "+e);
}
}
}