文件输入流 FileInputStream
文件输入流 FileInputStream博客分类:?java IOJava??? FileInputStream 类从文件中读取数据。它有以下构造方法:?
??? FileInputStream(File file)--------参数file指定文件的数据源?
??? FileInputStream(String name)-------- 参数name指定文件数据源。在参数name中包含了文件路径信息。?
??? 下面这个FileInputStreamTester类读取test.txt文件中的内容。?
Java代码??
- package?xiaohang.com;??
- ??
- import?java.io.FileInputStream;??
- import?java.io.IOException;??
- ??
- public?class?FileInputStreamTester?{??
- ????public?static?void?main(String[]?args)?throws?IOException?{??
- ????????FileInputStream?in?=?new?FileInputStream("D:\\test.txt");??
- ????????int?data;??
- ????????while?((data?=?in.read())?!=?-1)?{??
- ????????????System.out.println(data?+?"?");??
- ????????}??
- ????????//?关闭此文件输入流并释放与此流有关的所有系统资源??
- ????????in.close();??
- ????}??
- }??
????? 假定在 test.txt文件中包含的字符串为"abc1好" ,并且假定文件所在的操作系统的默认字符编码为GBK, 那么在文件中实际存放的是这5个字符的GBK 字符编码, 字符"a"、"b"、"c"、 和 "1" 的GBK字符编码各占一个字节,分别是97、98、99和49。“好”的GBK字符编码占2个字节,为186和195。文件输入流的read()方法每次读取一个字节,因此以上程序打印的结果为:?
?
?? 如果文件很大,为了提高效率,可以使用read(byte[] buff)方法,它能减少物理文件的次数。下面这个UseBuffer类的main()方法把test.txt 中数据拷贝到out.txt中。在进行读写操作时,都使用了字节数组缓冲区,每次最多读写1024个字节。?
Java代码??
- package?xiaohang.com;??
- ??
- import?java.io.FileInputStream;??
- import?java.io.FileOutputStream;??
- import?java.io.IOException;??
- ??
- public?class?UseBuffer?{??
- ????public?static?void?main(String[]?args)?throws?IOException?{??
- ????????final?int?SIZE=1024;??
- ????????FileInputStream?in?=?new?FileInputStream("D:\\test.txt");??
- ????????FileOutputStream?out?=?new?FileOutputStream("D:\\out.txt");??
- ????????//创建字节数组缓冲区??
- ????????byte[]?buff?=?new?byte[SIZE];??
- ????????//把test.txt文件中的数据读入到buff中??
- ????????int?len?=?in.read(buff);??
- ????????while?(len!=-1)?{??
- ????????????//把buff中的数据写到out.txt文件中??
- ????????????out.write(buff,?0,?len);??
- ????????????//从新读取输入流,此时已到达输入流的结尾??
- ????????????len=in.read();??
- ????????}??
- ????????in.close();??
- ????????out.close();??
- ????}??
- }??
?? 如果test.txt文件与UseBuffer类的 .class 文件位于同一目录下,也可以通过Class类的getResourceAsStream()方法来获得输入流,例如:?
Java代码??
- InputStream?in?=?UseBuffer.class.getResourceAsStream("test.txt");//适用于静态方法或实例方法??
- //或者:??
- InputStream?in?=?this.getClass().getResourceAsStream("test.txt");?//适用于实例方法??
? 以上方法的好处在于只提供test.txt文件的相对路径。
??? FileInputStream(File file)--------参数file指定文件的数据源?
??? FileInputStream(String name)-------- 参数name指定文件数据源。在参数name中包含了文件路径信息。?
??? 下面这个FileInputStreamTester类读取test.txt文件中的内容。?
Java代码??

- package?xiaohang.com;??
- ??
- import?java.io.FileInputStream;??
- import?java.io.IOException;??
- ??
- public?class?FileInputStreamTester?{??
- ????public?static?void?main(String[]?args)?throws?IOException?{??
- ????????FileInputStream?in?=?new?FileInputStream("D:\\test.txt");??
- ????????int?data;??
- ????????while?((data?=?in.read())?!=?-1)?{??
- ????????????System.out.println(data?+?"?");??
- ????????}??
- ????????//?关闭此文件输入流并释放与此流有关的所有系统资源??
- ????????in.close();??
- ????}??
- }??
????? 假定在 test.txt文件中包含的字符串为"abc1好" ,并且假定文件所在的操作系统的默认字符编码为GBK, 那么在文件中实际存放的是这5个字符的GBK 字符编码, 字符"a"、"b"、"c"、 和 "1" 的GBK字符编码各占一个字节,分别是97、98、99和49。“好”的GBK字符编码占2个字节,为186和195。文件输入流的read()方法每次读取一个字节,因此以上程序打印的结果为:?

?? 如果文件很大,为了提高效率,可以使用read(byte[] buff)方法,它能减少物理文件的次数。下面这个UseBuffer类的main()方法把test.txt 中数据拷贝到out.txt中。在进行读写操作时,都使用了字节数组缓冲区,每次最多读写1024个字节。?
Java代码??

- package?xiaohang.com;??
- ??
- import?java.io.FileInputStream;??
- import?java.io.FileOutputStream;??
- import?java.io.IOException;??
- ??
- public?class?UseBuffer?{??
- ????public?static?void?main(String[]?args)?throws?IOException?{??
- ????????final?int?SIZE=1024;??
- ????????FileInputStream?in?=?new?FileInputStream("D:\\test.txt");??
- ????????FileOutputStream?out?=?new?FileOutputStream("D:\\out.txt");??
- ????????//创建字节数组缓冲区??
- ????????byte[]?buff?=?new?byte[SIZE];??
- ????????//把test.txt文件中的数据读入到buff中??
- ????????int?len?=?in.read(buff);??
- ????????while?(len!=-1)?{??
- ????????????//把buff中的数据写到out.txt文件中??
- ????????????out.write(buff,?0,?len);??
- ????????????//从新读取输入流,此时已到达输入流的结尾??
- ????????????len=in.read();??
- ????????}??
- ????????in.close();??
- ????????out.close();??
- ????}??
- }??
?? 如果test.txt文件与UseBuffer类的 .class 文件位于同一目录下,也可以通过Class类的getResourceAsStream()方法来获得输入流,例如:?
Java代码??

- InputStream?in?=?UseBuffer.class.getResourceAsStream("test.txt");//适用于静态方法或实例方法??
- //或者:??
- InputStream?in?=?this.getClass().getResourceAsStream("test.txt");?//适用于实例方法??
? 以上方法的好处在于只提供test.txt文件的相对路径。