Java各种IO流读取文件内容的方法

使用FileInputStream类

/**
   * 使用字节输入流(FileInputStream)
   * @param text 需要读取文件的路径
   * @return 读取的内容
   * @throws Exception
   */
  public String inputStreamDemo(File text) throws Exception {
    StringBuffer sb = new StringBuffer();
    InputStream ips = new FileInputStream(text);
    int count = 0;
    byte[] data = new byte[1024];
    // 每次读取1024个字节
    while((count = ips.read(data)) != -1) {
                // 将字节数组转换为字符串
      sb.append(new String(data, 0, count));
    }
    ips.close();
    return sb.toString();
  }

使用FileReader类

/**
   * 使用字符输入流(FileReader)
   * @param text 需要读取文件的路径
   * @return 读取的内容
   * @throws Exception
   */
  public String fileReaderDemo(File text) throws Exception {
    StringBuffer sb = new StringBuffer();
    Reader red = new FileReader(text);
    /*
      int temp = 0;
      while((temp = red.read()) != -1) {
        this.sb.append((char)temp);
      }
    */
    int count = 0;
    char[] data = new char[1024];
    while((count = red.read(data)) != -1) {
                        // 将字符数组转换为字符串
      sb.append(new String(data, 0, count));
    }
    red.close();
    return sb.toString();
  }

使用InputStreamReader类

/**
   * 使用字节转换流(InputStreamReader)
   * @param text 需要读取文件的路径
   * @return 读取的内容
   * @throws Exception
   */
  public String inputStreamReaderDemo(File text) throws Exception {
    StringBuffer sb = new StringBuffer();
    // 将字节流转换成字符流
    Reader red = new InputStreamReader(new FileInputStream(text));
    int count = 0;
    char[] data = new char[1024];
    while((count = red.read(data)) != -1) {
                        // 将字符数组转换为字符串
      sb.append(new String(data, 0, count));
    }
    red.close();
    return sb.toString();
  }

使用BufferedReader类

/**
  * 使用缓冲区(BufferedReader)
  * @param text 需要读取文件的路径
  * @return 读取的内容
  * @throws Exception
 */
public String bufferedReaderDemo(File text) throws Exception {
    StringBuffer sb = new StringBuffer();
    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(text)));
    int count = 0;
    char[] data = new char[1024];
    while((count = br.read(data)) != -1) {
                        // 将字符数组转换为字符串
      sb.append(new String(data, 0, count));
    }
    /*
      String data = null;
      // 判断是否还有内容,每次读取一行数据。
      while((data = br.readLine()) != null) {
        sb.append(data).append("\n");
      }
    */
    br.close();
    return sb.toString();
  }

 

使用Scanner类

/**
   * 使用Scanner
   * @param text 需要读取文件的路径
   * @return 读取的内容
   * @throws Exception
   */
  public String scannerDemo(File text) throws Exception {
    StringBuffer sb = new StringBuffer();
    Scanner sc = new Scanner(new FileInputStream(text));
    // 判断是否还有内容,每次读取一行数据。
    while(sc.hasNext()) {
      sb.append(sc.next()).append("\n");
    }
    sc.close();
    return sb.toString();
  }

关于字节流、字符流读取

注意:

1.由于每种编码字符的字节数各不相同,在使用字节流读取文件内容时,不能每次只读取一个字节就进行输出操作。应当每次读取一个指定长度的字节数组的字节数据,然后再进行类型转换,避免产生乱码的情况。

2.而使用字符流读取文件内容时,可以每次读取一个字符也可以每次读取指定长度字符数组的字符数据;每次读取一个字符得到的是字符对应的ASCII码值,最后再进行类型转换即可。

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注