Java 程序设计语言
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言, 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台 (即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se)) 的总称
这篇文章主要介绍了 java IO 流 之 输入流 InputString()的使用, 以及读取数据的三种方式详解, 非常不错, 需要的朋友可以参考下
本文主要给大家介绍 java 的 InputStream 流的使用
(1)FileInputstream: 子类, 读取数据的通道
使用步骤:
1. 获取目标文件: new File()
2. 建立通道: new FileInputString()
3. 读取数据: read()
4. 释放资源: close()
- // 一些默认要导入的包
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.IOException;
- public static void main(String[] args) throws IOException {
- // TODO Auto-generated method stub
- // 分别调用方法查看效果
- test1();
- System.out.println("-------------------------------------------");
- test2();
- System.out.println("-------------------------------------------");
- test3();
- System.out.println("-------------------------------------------");
- test4();
- }
(2)读取数据的三种方式
1. 直接读取 (一次只能一个字节)
- int date = fileInputStream.read();
- char date3 = (char) fileInputStream.read();
- // 方式一 直接打印
- public static void test1() throws IOException {
- //(1)获取目标文件路径
- File file = new File("C:\\Users\\joke\\Desktop\\Demo1.java");
- //(2)根据目标文件路径 建立通道: new FileInputStream(file)
- FileInputStream fileInputStream = new FileInputStream(file);
- //(3)读取数据 :read();
- int date = fileInputStream.read(); // 这里是 int 类型
- int date2 = fileInputStream.read(); //
- char date3 = (char) fileInputStream.read(); // 以 char 类型显示
- System.out.println(date + "\\" + date2 + "\\" + date3);
- //(4)释放资源
- fileInputStream.close();
- }
2. 单独使用 for 循环(效率低)
- for (int i = 0; i < file.length(); i++) {
- System.out.print((char) fileInputStream.read());
- }
- // 方式二 循环遍历
- public static void test2() throws IOException {
- // 通过时间测试效率
- long startTime = System.currentTimeMillis();
- File file = new File("C:\\Users\\joke\\Desktop\\Demo1.java");
- FileInputStream fileInputStream = new FileInputStream(file);
- //for 循环
- for (int i = 0; i < file.length(); i++) {
- System.out.print((char) fileInputStream.read());
- }
- fileInputStream.close();
- long endTime = System.currentTimeMillis();
- System.out.println("读取文件所花时间:" + (endTime - startTime));
- }
3.Byte[ ] 缓冲区(只能读取指定的字节数不能读取一个完整的文件)
- byte[] bt = new byte[1024];
- int count = fileInputStream.read(bt);
- System.out.println(new String(bt, 0, count));
- // 方式三 创建缓冲区(只能读取制定的大小, 不能读取一个完整的文件)
- public static void test3() throws IOException {
- File file = new File("C:\\Users\\joke\\Desktop\\Demo1.java");
- FileInputStream fileInputStream = new FileInputStream(file);
- // 创建缓冲区, 加快读取数据, 确定要读取的字节大小
- byte[] bt = new byte[1024];
- //read() 读取字节
- int count = fileInputStream.read(bt);
- System.out.println(count); // 显示读取到的字节数
- System.out.println(new String(bt, 0, count)); // 将字节转为字符串显示
- fileInputStream.close();
- }
4. 缓冲区和循环结合缓冲区一般设置为 1024 的倍数理论上设置的缓冲区越大, 读取效率越高
- byte[] bt = new byte[1024];
- int count = 0;
- while ((count = fileInputStream.read(bt)) != -1) {
- System.out.println(new String(bt, 0, count));
- }
- // 方式四 循环与缓冲区结合(效率高)
- public static void test4() throws IOException {
- // 通过时间测试效率
- long startTime = System.currentTimeMillis();
- File file = new File("C:\\Users\\joke\\Desktop\\Demo1.java");
- FileInputStream fileInputStream = new FileInputStream(file);
- // 缓冲区一般设置为 1024 的倍数理论上设置的缓冲区越大, 读取效率越高
- byte[] bt = new byte[1024];
- int count = 0;
- //read 返回 -1 时, 证明已经遍历完
- while ((count = fileInputStream.read(bt)) != -1) {
- // 字符串型显示(从 bt 中的第 0 个字节开始遍历 count 个长度)
- System.out.println(new String(bt, 0, count));
- }
- fileInputStream.close();
- long endTime = System.currentTimeMillis();
- System.out.println("读取文件所花时间:" + (endTime - startTime));
- }
陌陌说:
在以上, 对比第二个和第四个方法, 会发现方法四的效率是比较高的, 所以推荐使用的四个方法
在这里我们是直接抛出异常, 除了抛出之外我们还可以使用
try{}cater{}finally{}
的方式来处理异常
来源: http://www.phperz.com/article/18/0214/359243.html