Java流
文件通常是由一连串的字节或字符构成,组成文件的字节序列称为字节流,组成文件的字符序列称为字符流。 Java 中根据流的方向可
以分为输入流和输出流。
输入流是将文件或其它输入设备的数据加载到内存的过程; 输出流恰恰相反, 是将内存中的数据保存到文件或其他输出设备。
见图:文件是由字符或字节构成, 那么将文件加载到内存或再将文件输出到文件, 需要有输入和输出流的支持,那么在
Java 语言中又把输入和输出流分为了两个,字节输入和输出流,字符输入和输出流InputStream 是字节输入流:
InputStream 是一个抽象类, 所有继承了 InputStream 的类都是字节输入流OutputStream(字节输出流):
继承了 OutputStream 都是字节输出流Reader(字符输入流):
继承了 Reader 都是字符输如流Writer(字符输出流):
继承了 Writer 都是字符输出流

文件流主要分为:文件字节输入流、文件字节输出流、文件字符输入流、文件字符输出流FileInputStream(文件字节输入流): 主要按照字节方式读取文件FileOutputStream(文件字节输出流): 主要按照字节方式写文件FileReader(文件字符输入流): FileReader 是一字符为单位读取文件,也就是一次读取两个字节
FileWriter(文件字符输出流)
/*java.io.InputStream 字节输入流java.io.FileInputStream 文件字节输入流按照字节方式读取文件*/import java.io.*;public class FileInputStreamTest01{public static void main(String[] args){FileInputStream fis = null;try{fis = new FileInputStream("C:\\work\\Java\\course\\vip\\JavaSE-Course-Arry\\chapter25\\Test01.java");int i = fis.read(); // 以字节的方式读取
            System.out.println("i = " + i);//读出为-1
        }catch(FileNotFoundException e){e.printStackTrace();}catch(IOException e){e.printStackTrace();} finally{// 关闭文件输入流if(fis != null){try{fis.close();    }catch(IOException e){e.printStackTrace();}}}}}

/*int read(byte[] b);从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。*/import java.io.*;public class FileInputStreamTest02{public static void main(String[] args){try{FileInputStream fis = new FileInputStream("C:\\work\\Java\\course\\vip\\JavaSE-Course-Arry\\chapter25\\Test01.java");// 准备一个byte数组byte[] bytes = new byte[3]; // 每一次最多读取三个字节// int read(byte[] b);int i1 = fis.read(bytes);System.out.println("i = " + i1);System.out.println(new String(bytes)); //输出乱码/* 乱码,文件正常读取,但是我们的汉字乱码了,原因在于使用了字节输入流,他是一个一个字节读取的,所以读取一个字节就打印,那么汉字是不完整的 所以就乱码*/} catch(Exception e){e.printStackTrace();    }}}

/*文件的备份(复制粘贴)*/import java.io.*;public class FileOutputStreamTest01{public static void main(String[] args){FileInputStream fis = null;FileOutputStream fos = null;try{fis = new FileInputStream("C:\\work\\keke.jpg");        fos = new FileOutputStream("C:\\work\\Java\\keke.jpg");System.out.println("文件复制开始进行中 ........");// 一边读,一边写int temp = 0; // 临时变量while((temp = fis.read()) != -1){fos.write(temp);}System.out.println("文件复制完毕 !");} catch(FileNotFoundException e){e.printStackTrace();} catch(IOException e){e.printStackTrace();} finally{if(fis != null){try{fis.close();} catch(Exception e){e.printStackTrace();}}if(fos != null){try{fos.close();} catch(Exception e){e.printStackTrace();}                }}}}

/*FileReader 文件的字符输入流是以字符为单位读取文件,也就是一次读取两个字节*/import java.io.*;public class FileReaderTest01{public static void main(String[] args){FileReader fr = null;try{fr = new FileReader("C:\\work\\ming.txt");int temp = 0;while((temp = fr.read()) != -1){// 输出字符System.out.println(temp);    }// 为什么不乱码? 因为采用了字符输入流 读取文本文件// 所以汉字就不乱码了(一次读取两个字节<即一个字符>)
            } catch(FileNotFoundException e){e.printStackTrace();    } catch(IOException e){e.printStackTrace();} finally{try{if(fr != null){fr.close();    }} catch(IOException e){e.printStackTrace();}}}}

/*FileWriter 文件字符输出流java.lang.Object继承者 java.io.Writer继承者 java.io.OutputStreamWriter继承者 java.io.FileWriter*/import java.io.*;public class FileWriterTest01{public static void main(String[] args){FileWriter fw = null;try{// true表示 在文件后面追加fw = new FileWriter("C:\\work\\ming.txt",true);// 换行(\r\n)fw.write("\r\n\r\n太棒了!电子科技大学中山学院");} catch(FileNotFoundException e){e.printStackTrace();    } catch(IOException e){e.printStackTrace();    } finally{try{if(fw != null){fw.close();    }} catch(IOException e){e.printStackTrace();        }}}}

/*采用字节缓冲流改造文件复制代码
*/import java.io.*;public class BufferedStreamTest01{public static void main(String[] args){BufferedInputStream bis =  null;BufferedOutputStream bos = null;try{// FileInputStream fis = new FileInputStream("C:\\work\\arry.txt");
            bis = new BufferedInputStream(new FileInputStream("C:\\work\\keke.jpg"));// FileOutputStream fos = new FileOutputStream("C:\\work\\Java\\course\\arry.txt.bak");bos = new BufferedOutputStream(new FileOutputStream("C:\\work\\Java\\course\\keke.jpg"));System.out.println("文件复制开始进行中 .....");int temp = 0;while((temp = bis.read()) != -1){bos.write(temp);    }// 刷新
            bos.flush();System.out.println("文件复制成功 !");} catch(FileNotFoundException e){e.printStackTrace();    } catch(IOException e){e.printStackTrace();} finally{try{if(bis != null){bis.close();}if(bos != null){bos.close();    }} catch(IOException e){e.printStackTrace();    }}}}

转载于:https://www.cnblogs.com/Deng1185246160/p/4233199.html

第二十四节(Java文件流,缓冲流)相关推荐

  1. Python编程基础:第二十四节 作用域Scope

    第二十四节 作用域Scope 前言 实践 前言 在Python中每一个变量都有其自己的生命周期,我们一般将变量分为全局变量与局部变量,全局变量是指在整个代码内部都可以访问到的变量,局部变量是指只有在函 ...

  2. 大白话5分钟带你走进人工智能-第二十四节决策树系列之分裂流程和Gini系数评估(3)...

     第二十四节决策树系列之分裂流程和Gini系数评估(3) 上一节中我们讲解了决策树的数学表达形式,本节的话我们讲解决策树的分裂流程以及分裂条件的评估.我们基于决策树的递归表达式上:           ...

  3. 火云开发课堂 - 《使用Cocos2d-x 开发3D游戏》系列 第二十四节:小项目实训《绝命沙滩》

    <使用Cocos2d-x 开发3D游戏>系列在线课程 第二十四节:小项目实训<绝命沙滩> 视频地址:http://edu.csdn.net/course/detail/1330 ...

  4. 【java】兴唐第二十四节课

    HashMap中put函数的源码分析: (一)知识点: 1.方法resize()的作用是扩容 2. if ((p = tab[i = (n - 1) & hash]) == null) 其中n ...

  5. slim php dd model,第二十四节,TensorFlow下slim库函数的使用以及使用VGG网络进行预训练、迁移学习(附代码)...

    在介绍这一节之前,需要你对slim模型库有一些基本了解,具体可以参考第二十二节,TensorFlow中的图片分类模型库slim的使用.数据集处理,这一节我们会详细介绍slim模型库下面的一些函数的使用 ...

  6. Scala入门到精通——第二十四节 高级类型 (三)

    本节主要内容 Type Specialization Manifest.TypeTag.ClassTag Scala类型系统总结 在Scala中,类(class)与类型(type)是两个不一样的概念. ...

  7. 第二十四节:动态加载JS和动态加载CSS

    1.动态加载JS 一般需要用到js,需要将js放到<script></<script>中,一般script放到页面底部:或者在顶部引入外部js. <!DOCTYPE ...

  8. java中过滤流_第十四讲 Java中的字节流和过滤流

    第十四讲Java中的字节流和过滤流 主要内容 InputStream和FileInputStream OutputStream和FileOutputStream 文件字节IO流应用举例 过滤流类和常用 ...

  9. Python编程基础:第三十四节 文件移动Move a File

    第三十四节 文件移动Move a File 前言 实践 前言 当我们需要将一个文件/文件夹移动到另一个指定路径时,就需要用到shutil.move()函数,该函数需要指定两个参数shutil.move ...

  10. 第二十四章 并发编程

    第二十四章 并发编程 爱丽丝:"但是我不想进入疯狂的人群中" 猫咪:"oh,你无能为力,我们都疯了,我疯了,你也疯了" 爱丽丝:"你怎么知道我疯了&q ...

最新文章

  1. linux ftrace原理
  2. mysql:通用查询日志general_log
  3. 神策数据丨IPTV/OTT 精细化运营体系构建指南
  4. linux下如何查看某软件是否已安装
  5. Android开发之ADB常用命令
  6. 程序员学好英语的方法(转)
  7. logstash windows
  8. subversion安装与配置备忘录
  9. C语言(CED)输出前k大的数(分治法/局部快速排序):给定一个数组,统计前k大的数并且把这k个数从大到小输出。
  10. 【AI视野·今日CV 计算机视觉论文速览 第207期】
  11. 获取linux服务器基本信息命令行,centos 查看服务器运行的服务和基本信息
  12. 如何解决SQL Server中SQL身份危机
  13. 为什么总说程序员是吃青春饭的?真的是 35 岁混不到管理就等于失业?
  14. moviepy图片和文字合成视频
  15. python复数类型的虚部通过_Python 复数数据类型详解(complex)[学习 Python 必备基础知识][看此一篇就够了...
  16. 运用PS制作3G、4G、5G、6G矢量图方法
  17. omv检查硬盘坏道_MHDD磁盘坏道扫描工具使用方法(详细图文教程)
  18. 机器学习案例:孕妇吸烟与胎儿健康
  19. HTML设置页面动画效果有几种,前端制作动画的几种方式(css3,js)
  20. SQL server 2008不允许保存更改的解决办法

热门文章

  1. LocalDateTime时间加减法
  2. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-10.Springboot2.x用户登录拦截器开发实战...
  3. Python程序设计--第5章 函数设计与使用
  4. [转帖]buffer与cache的区别
  5. Python进程学习笔记-多进程修改全局变量
  6. 多进程——守护进程例子
  7. 多用类型常量,少用#define预处理指令
  8. 微信支付可以在App Store购买应用了 附绑定教程
  9. Python XML解析(转载)
  10. oracle 常用系统表