Java读取文件方法

一、流的概念
       流(stream)的概念源于UNIX中管道(pipe)的概念。在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备、外部文件等。
        一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是Internet上的某个URL。
        流的方向是重要的,根据流的方向,流可分为两类:输入流和输出流。用户可以从输入流中读取信息,但不能写它。相反,对输出流,只能往输入流写,而不能读它。
       实际上,流的源端和目的端可简单地看成是字节的生产者和消费者,对输入流,可不必关心它的源端是什么,只要简单地从流中读数据,而对输出流,也可不知道它的目的端,只是简单地往流中写数据。 
       形象的比喻——水流 ,文件 ======程序 ,文件和程序之间连接一个管道,水流就在之间形成了,自然也就出现了方向:可以流进,也可以流出.便于理解,这么定义流: 流就是一个管道里面有流水,这个管道连接了文件和程序。
二、流的分类
  1. java.io包中的类对应两类流,一类流直接从指定的位置(如磁盘文件或内存区域)读或写,这类流称为 结点流(node stream), 其它的流则称为过滤器(filters)。过滤器输入流往往是以其它输入流作为它的输入源,经过过滤或处理后再以新的输入流的形式提供给用户,过滤器输出流的原理也类似。 
  2. Java的常用输入、输出流
java.io包中的stream类根据它们操作对象的类型是字符还是字节可分为两大类: 字符流和字节流。
 
  • Java的字节流
InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先。
  • Java的字符流
Reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先。
结合开始所说的输入/输出流 ,出现了个一小框架。

                     字节流                         字符流
输入流        InputStream               Reader
输出流        OutputStream            Writer


//复制文件

1.字节流 FileInputStream FileOutputStream 

 public void readFile(){
  try {
   File file = new File("D:\\Test\\src\\com\\stream\\TestFileInputStream.java");
   FileInputStream fin = null;
   FileOutputStream fou = null;
   fin = new FileInputStream(file);
   fou = new FileOutputStream("D:\\Test\\src\\com\\stream\\TestFileInputStream.txt");
   int num = 0;
   int b = 0;
   while ((b = fin.read()) != -1){
    fou.write(b);
    num ++;
    System.out.print((char)b);
   }
   System.out.println(num);
   fin.close();
   fou.close();
  } catch (FileNotFoundException e) {
   System.out.println("文件不存在!");
   System.exit(-1);
  } catch (IOException e) {
   System.out.println("读取文件错误!");
   System.exit(-1);
  }
 }

 

2.字符流 FileReader FileWriter 

 public void fileReader(){
  try {
   FileReader reader = new FileReader("D:\\Test\\src\\com\\stream\\TestFileReader.java");
   FileWriter writer = new FileWriter("D:\\Test\\src\\com\\stream\\TestFileReader.txt");

//按字符数组读取

   char b[] = new char[1024];
   while((b = reader.read())!= -1){
    writer.write(b);
    System.out.print((char)b);
   }
   reader.close();
   writer.close();
   System.out.println("文件复制成功!");
  } catch (FileNotFoundException e) {
   System.out.println("文件不存在!");
  } catch (IOException e) {
   System.out.println("读取文件失败");
  }
 }

 

3.带缓冲区的字节流 BufferedInputStream  BufferedOutputStream 

 public void test(){
  try {
   BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\Test\\src\\com\\stream\\BufferedStream.java"));
   BufferedOutputStream bot = new BufferedOutputStream(new FileOutputStream("D:\\Test\\src\\com\\stream\\BufferedStream.txt"));
   int b = 0;
   while((b = bis.read()) != -1){
    System.out.print((char)b);
    bot.write((char)b);
    bot.flush();
    
   }
   bis.close();
   bot.close();
   System.out.println("文件复制完成!");
  } catch (FileNotFoundException e) {
   System.out.println("文件不存在!");
  } catch (IOException e) {
   System.out.println("读取文件失败!");
  }
 }

 

4.带缓冲区的字符流 BufferedReader  BufferedWriter 

 public void test(){
  try {
   BufferedReader re = new BufferedReader(new FileReader("D:\\Test\\src\\com\\stream\\BufferedIO.java"));
   BufferedWriter wr = new BufferedWriter(new FileWriter("D:\\Test\\src\\com\\stream\\BufferedIO.txt"));
   String str = "";
   while((str = re.readLine()) != null){
    System.out.println(str);
    wr.write(str);
    wr.newLine();
    wr.flush();
   }
   System.out.println("复制完成!");
  } catch (FileNotFoundException e) {
   System.out.println("文件不存在!");
  } catch (IOException e) {
   System.out.println("读取文件失败!");
  }
 }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值