首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

资料输入流 FileInputStream

2012-08-21 
文件输入流 FileInputStream文件输入流 FileInputStream博客分类:?java IOJava??? FileInputStream 类从文

文件输入流 FileInputStream

文件输入流 FileInputStream博客分类:?
  • java IOJava??? FileInputStream 类从文件中读取数据。它有以下构造方法:?
    ??? FileInputStream(File file)--------参数file指定文件的数据源?
    ??? FileInputStream(String name)-------- 参数name指定文件数据源。在参数name中包含了文件路径信息。?
    ??? 下面这个FileInputStreamTester类读取test.txt文件中的内容。?
    Java代码??资料输入流 FileInputStream
    1. package?xiaohang.com;??
    2. ??
    3. import?java.io.FileInputStream;??
    4. import?java.io.IOException;??
    5. ??
    6. public?class?FileInputStreamTester?{??
    7. ????public?static?void?main(String[]?args)?throws?IOException?{??
    8. ????????FileInputStream?in?=?new?FileInputStream("D:\\test.txt");??
    9. ????????int?data;??
    10. ????????while?((data?=?in.read())?!=?-1)?{??
    11. ????????????System.out.println(data?+?"?");??
    12. ????????}??
    13. ????????//?关闭此文件输入流并释放与此流有关的所有系统资源??
    14. ????????in.close();??
    15. ????}??
    16. }??

    ????? 假定在 test.txt文件中包含的字符串为"abc1好" ,并且假定文件所在的操作系统的默认字符编码为GBK, 那么在文件中实际存放的是这5个字符的GBK 字符编码, 字符"a"、"b"、"c"、 和 "1" 的GBK字符编码各占一个字节,分别是97、98、99和49。“好”的GBK字符编码占2个字节,为186和195。文件输入流的read()方法每次读取一个字节,因此以上程序打印的结果为:?

    资料输入流 FileInputStream?

    ?? 如果文件很大,为了提高效率,可以使用read(byte[] buff)方法,它能减少物理文件的次数。下面这个UseBuffer类的main()方法把test.txt 中数据拷贝到out.txt中。在进行读写操作时,都使用了字节数组缓冲区,每次最多读写1024个字节。?
    Java代码??资料输入流 FileInputStream
    1. package?xiaohang.com;??
    2. ??
    3. import?java.io.FileInputStream;??
    4. import?java.io.FileOutputStream;??
    5. import?java.io.IOException;??
    6. ??
    7. public?class?UseBuffer?{??
    8. ????public?static?void?main(String[]?args)?throws?IOException?{??
    9. ????????final?int?SIZE=1024;??
    10. ????????FileInputStream?in?=?new?FileInputStream("D:\\test.txt");??
    11. ????????FileOutputStream?out?=?new?FileOutputStream("D:\\out.txt");??
    12. ????????//创建字节数组缓冲区??
    13. ????????byte[]?buff?=?new?byte[SIZE];??
    14. ????????//把test.txt文件中的数据读入到buff中??
    15. ????????int?len?=?in.read(buff);??
    16. ????????while?(len!=-1)?{??
    17. ????????????//把buff中的数据写到out.txt文件中??
    18. ????????????out.write(buff,?0,?len);??
    19. ????????????//从新读取输入流,此时已到达输入流的结尾??
    20. ????????????len=in.read();??
    21. ????????}??
    22. ????????in.close();??
    23. ????????out.close();??
    24. ????}??
    25. }??

    ?? 如果test.txt文件与UseBuffer类的 .class 文件位于同一目录下,也可以通过Class类的getResourceAsStream()方法来获得输入流,例如:?
    Java代码??资料输入流 FileInputStream
    1. InputStream?in?=?UseBuffer.class.getResourceAsStream("test.txt");//适用于静态方法或实例方法??
    2. //或者:??
    3. InputStream?in?=?this.getClass().getResourceAsStream("test.txt");?//适用于实例方法??

    ? 以上方法的好处在于只提供test.txt文件的相对路径。