IO流

I——input 输入

O——Output 输出

文件

File  所有文件类的父类

创建方式

  1. File file = new File("文件路径");

文件对象常用的方法

  1. 1.获取文件路径(绝对路径 是带盘符的)
  2. file.getAbsolutePath();
  3. 2.获取文件名
  4. file.getName();
  5. 3.文件是否存在
  6. file.exists();// 有返回true没有返回false
  7. 4.创建文件
  8. file.createNewFile();// 此方法有异常需要抛
  9. 5.是否是文件夹
  10. file.isDirectory();// 是文件夹返回true,否返回false
  11. file.isFile();// 是文件返回true,否返回false
  12. 6.创建文件夹
  13. file.mkdir();

四个抽象类

  1. InputSteam
  2. OutputStream
  3. Reader
  4. Writer

InputSteam--------子类-------------》FileInputStream  文件输入流

  1. 1.
  2. read() // 每次读取一个字节,返回该字节的ASCII码值,当读到最后返回-1
  3. 读到数组里 read(byte[] bytes)// 把读取的字符,存在了byte[]里,返回的是实际个数。每次最多读取数组长度的个数
  4.  
  5. byte[] bytes =new byte[1024];
  6. int len;// len为数组实际个数
  7. while((len = fis.read(bytes))!=-1){
  8. // 遍历数组
  9. for(int i = 0;i<len;i++){
  10. System.out.prin((char)bytes[i]);
  11. }
  12. }
  13. // 比如:数组长度为5,每次最多读5个,返回实际读取个数

按照传输单位划分:

InputSteam 和 OutputStream 字节流  传输的数据单位是字节

Reader 和 Writer 字符流  传输单位是字符

按照流向划分:

输入流 外部输入到程序中,也叫“读”操作

输出流 程序中的内容输出到外部,也叫“写”操作

  1. FileInputStream 字节输入流
  2. // 创建文件对象
  3. File file = new File("...");
  4. // 创建输入流
  5. FileInputStream fis = new FileInputStream(file);
  6. int len;// 记录每个字符返回的ASCII码值
  7. while((len = fis.read()) !=-1){// 等len为-1时退出循环
  8. // 不为-1,说明还有字符
  9. // 输出是把ASCII码值再转成字符
  10. System.out.print((char)len);
  11. }
  12. FileOutputStream 字节输出流
  13. write(int len) // 每次写出实际的字符
  14. write(bytes,off,len)// bytes 数组 off是从哪个下标写出去 len每次写多少个

文件的复制

  1. 创建两个文件对象,一个源文件,一个目标文件
  2.  
  3. 创建输入流对象
  4.  
  5. 创建输出流对象
  6.  
  7. 每读一个字符 写出去

关闭流

  1. try{
  2. 代码块
  3. }finally{
  4. if(非空判断)
  5. file.close();
  6. }

总结

  1. 111
  1. 处理字节流 // 应用于图片、英文文章、视频等大型字节文件
  2. 1.InputStream
  3. 子类:FileInputStream
  4. 2.OutputStream
  5. 子类:FileOutputStream
  6. 处理字符流 // 专门处理 纯文本文件(汉字文章等)
  7. 1.Reader
  8. 子类:FileReader
  9. 2.Writer
  10. 子类:FileWriter

缓冲流

缓冲字节流

  1. 1.BufferedInputStream 输入缓冲流
  2. 2.BufferedOutputStream 输出缓冲流
  3. // 注意:缓冲流 包裹着 普通流
  4. // CPU不需要频繁的面对磁盘,而是缓冲流

缓冲字符流

  1. 1.BufferedReader 读字符的缓冲流
  2. 2.BufferedWriter 写字符的缓冲流
  3. // 注意:在字符缓冲流有一个特有的方法 readLine() 读一行,返回的字符串类型 效率比read()高

每次的IO操作都会先经过缓冲区

当写数据时,先写到缓冲区

flush() 刷新缓存区,强制让缓冲区的数据写出,流还在

clsoe() 先刷新缓存区,在关闭流。

021_IO流的更多相关文章

  1. 使用C#处理基于比特流的数据

    使用C#处理基于比特流的数据 0x00 起因 最近需要处理一些基于比特流的数据,计算机处理数据一般都是以byte(8bit)为单位的,使用BinaryReader读取的数据也是如此,即使读取bool型 ...

  2. HTML 事件(三) 事件流与事件委托

    本篇主要介绍HTML DOM中的事件流和事件委托. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流与事件委托 4 ...

  3. FILE文件流的中fopen、fread、fseek、fclose的使用

    FILE文件流用于对文件的快速操作,主要的操作函数有fopen.fseek.fread.fclose,在对文件结构比较清楚时使用这几个函数会比较快捷的得到文件中具体位置的数据,提取对我们有用的信息,满 ...

  4. java.IO输入输出流:过滤流:buffer流和data流

    java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入:缓冲流为什么比普通的文件字节流效率高? ...

  5. java 字节流与字符流的区别

    字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢?实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作 ...

  6. BZOJ 3504: [Cqoi2014]危桥 [最大流]

    3504: [Cqoi2014]危桥 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1407  Solved: 703[Submit][Status] ...

  7. java I/O流

    输入流(读取数据的流) BufferedInputStream---继承--->FileInputStream--继承--->InputStream------> (1)字节流操作中 ...

  8. Ford-Fulkerson 最大流算法

    流网络(Flow Networks)指的是一个有向图 G = (V, E),其中每条边 (u, v) ∈ E 均有一非负容量 c(u, v) ≥ 0.如果 (u, v) ∉ E 则可以规定 c(u, ...

  9. .NET基础拾遗(3)字符串、集合和流

    Index: (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开发基础 ...

随机推荐

  1. camunda流程部署的一些简单操作

    act_re_deployment:(流程部署对象表)存放流程部署的显示名和部署时间 act_re_procdef:(流程定义表)存放流程定义的属性信息 act_ge_bytearray:(资源文件表 ...

  2. Java继承方法隐藏(覆盖)

    方法隐藏 一个类从其超类继承所有非私有静态方法.在子类中重新定义继承的静态方法称为方法隐藏.子类中的重定义静态方法隐藏其超类的静态方法.在类中重定义非静态方法称为方法覆盖.关于方法隐藏的重定义方法(名 ...

  3. 17-vim-查找字符或单词-02-查找并替换

    在vi中查找和替换命令需要在末行模式下执行. 命令 功能 :%s///g 末行模式下,查找并替换字符.例:%s /hello/world/g 1.全局替换 一次性替换文件中的所有文件的旧文本. 命令格 ...

  4. 1、Spring MVC的web.xml配置详解(转)

    版权声明:本文为博主原创文章,转载请注明出处http://blog.csdn.net/u010796790 1.spring 框架解决字符串编码问题:过滤器 CharacterEncodingFilt ...

  5. todolist拆分为逻辑页面和ui页面

    我们可以把Todolist 继续拆分 ,拆分为逻辑页面和ui页面 ui 页面 import React, { Component } from 'react';import 'antd/dist/an ...

  6. HDU 6326 Problem H Monster Hunter

    \(\mathtt{Problem H}\) \(\mathtt{Monster}\) \(\mathtt{Hunter}\) \(\mathcal{Description}\) 题目 给定一棵 \( ...

  7. The 'with' and 'as' Keywords

    Programming is all about getting the computer to do the work. Is there a way to get Python to automa ...

  8. WPF ListBox 横向排列

    WPF ListBox 横向排列   如果只是单纯的让ListBox可以横向配列,这样很简单,只需要更改ListBox的ItemsPanel模板就可以,例如: <ListBox><L ...

  9. 简单的使用Qt的QCustomplot画图

    一.新建一个widget工程 二.将Qcustomplot文件复制到项目下 三.右键qt项目增加已存在的文件 四.在.pro中添加 QT += widgets printsupport 五.在.h中添 ...

  10. 线段树区间合并优化dp——cf1197E(好)

    线段树优化dp的常见套路题,就是先按某个参数排序,然后按这个下标建立线段树,再去优化dp 本题由于要维护两个数据:最小值和对应的方案数,所以用线段树区间合并 /* dp[i]表示第i个套娃作为最内层的 ...