1,File类
··· 概念:File对象可以表示一个文件或目录。可以对其进行增删改查。
··· 常用方法:
    File f = new File(".");
    判断是不是目录:f.isDictionary();
    判断是不是文件:f.isFile();
    列出目录中的文件名:f.list();
    列出目录中的File对象:f.listFiles();  // 参数可以过滤文件
    新建文件:f.createNewFile();
    新建目录:f.mkdir();  // mkdirs() 创建层级目录
    系统文件分隔符:File.separator。
··· 注意:
    · File对象只是用来操作文件和目录的元数据,并不可以读写数据。
    · Files是File的工具类,属于NIO可以用来读取文件。
    · Files.readAllBytes()会将文件一次读入内存。
 
IO流分类
··· 按操作方式:
    · 输入流:InputStream
    · 输出流:OutputStream
··· 按数据类型:
    · 字节流:InputStream、OutputStream   # 所有字节流的父类
    · 字符流:Reader、Writer   # 所有字符流的父类
··· 按功能:
    · 节点流(原始):InputStream、OutputStream、Reader、Writer  # 直接对目标设备操作
    · 处理流(包装):BufferedReader、BufferedWriter  对节点流进行封装,使功能更强大
··· 注意:
    · 输入和输出的参照物是程序本身,不一定是内存到磁盘,因为有可能是内存到内存。
    · 对于二进制文件(如图片)必须使用字节流,因为字符流会根据编码一次读取多个字节,
        如一个图片有199个字节,用字符流读写时,最后一个字节编码会出错。
    · 字节流的读写速度比字符流快,因为字符流还要编码解码。
    · 字符流会使用系统默认编码,无法更改,所以可以使用转换流InputStreamReader读取
        字节流并指定编码。
    · java中的char和String都是以Unicode保存在内存中,需要输出时再转为指定编码。
 
2,InputStream
··· 概念:InputStream是所有输入流的超类,是同步IO。
··· 常用方法:
    · 读取到字节数组:read(char[]);  把数据填充到字节数组,并返回实际填充的字节数
    · 读取所有字节:readAllBytes();  # java8中没有
    · 读取指定长度字节:readNBytes(int len);  java8中没有
 
3,OutputStream
··· 概念:与InputStream类似。
··· 常用方法:
    · 写入字节到文件:write(byte[]); 
    · 写入数组的指定范围到文件:write(byte[], index, len);  最好使用这种方式。
    · 把把缓冲区里的内容立即写入文件:flush();   把缓冲区的内容立即写入文件。
 
4,Reader
··· 概念:根据系统默认编码,读取多个字节,并解码成字符Unicode保存在char中。
··· 用法与字节流类似
 
5,Writer
··· 概念:写入时会将字符根据默认编码方式编码为字节,保存在内部的字节数组中,再输出。
··· 用法与字节流类似
 
6,Buffered
··· 概念:Buffered是缓冲流(处理流),本身没有读写能力,通过传入节点流对象。
··· 可以按行读取
 
7,标准输入输出
··· System.in、System.out、System.err
··· 重定向:
    · 重定向输出:System.setOut(PrintStream);
    · 重定向输入:System.setIn(InputStream);
··· 注意:
    · System.in是InputStream类型,System.out和System.err是PrintStream类型。
 
8,打印流
··· PrintStream、PrintWriter;一般用来生成代码模板。标准输出就属于打印流。
··· 提供多种数据类型的输出,不会抛出IOException异常,自动flush。
 
9,NIO
··· 概念:IO流是面向流的同步IO,而NIO是面向缓冲区的异步IO(或同步非阻塞,有争议)
··· 核心组成:Buffer、Channel、Selector
··· Buffer
    · 作用:针对系统的缓冲区,负责存储数据。所有的缓冲区都是Buffer抽象类的子类。
    · 种类:7中基本数据类型的包装类,除Boolean类型。
    · 常见属性:
            capacity:容量。表示缓冲区最大数据容量,创建后不可更改。
            limit:      限制。表示第一个不应该读写数据的索引,limit后的数据不可读写。
            position:位置。表示下一个读写数据的索引,不大于limit。
            mark:     标记。可以指定Buffer中一特定的position。
    · 常用方法:
            allocate(int):创建间接缓冲区,并指定capacity大小。Buffer子类的静态方法(推荐)。
            flip():切换为读模式。默认是写模式。其实就是将limit设为position,position设为0
            clear():清空缓冲区。切换为写模式。其实就是将position设为0,limit设为capacity。
            put():添加数据。
            get():获取数据。
··· Channel:
    · 作用:是IO源与目标之间的连接,类似于Stream,只是一种通道,并不会存储数据。
    · 种类:FileChannel读写,映射文件;SocketChannel通过TCP读写网络中的数据。
    · 创建:Channel使用FileInputStream和FileOutputStream的getChannel()方法来创建。
    · 常用方法:
            read(Buffer):是将FileInputStream中打开的文件数据读入到FileBuffer中。
            write(Buffer):是将FileBuffer中的内容写入到FileOutputStream打开的文件中。
··· Selector:
    · 作用:用来监测Channel通道中的读写事件是否做好准备,这样一个线程可以管理多个Channel,从而管理多个网络。
··· 注意:
    · Buffer中的所有方法都是在修改那4个属性。
    · allocateDirect(int)创建的是直接缓冲区,在系统物理内存中,而不在JVM内存中,JDK控制内力弱,性能高,但是使用有风险,不推荐使用。
    · Files和Paths是文件相关的工具类,属于nio包。
 
注意事项
    · ObjectInputStream和ObjectOutputStream是对象流,可以用来输入输出对象,即序列化和反序列化,注意:static 和transient修饰的属性不会被序列化。
    ·  Properties:处理Java中*.properties文件常用的属性文件解析类,继承自Hashtable。

3,Java中的文件IO流的更多相关文章

  1. Java中常见的IO流及其使用

    Java中IO流分成两大类,一种是输入流.全部的输入流都直接或间接继承自InputStream抽象类,输入流作为数据的来源.我们能够通过输入流的read方法读取字节数据.还有一种是输出流,全部的输出流 ...

  2. Java中的文件和流相关知识

    1. File File类可以使用文件路径字符串来创建File实例,该文件路径可以是绝对路径或相对路径 File类的list()方法中可以接收一个FilenameFilter参数,通过该参数可以只列出 ...

  3. Android(java)学习笔记167:Java中操作文件的类介绍(File + IO流)

    1.File类:对硬盘上的文件和目录进行操作的类.    File类是文件和目录路径名抽象表现形式  构造函数:        1) File(String pathname)       Creat ...

  4. Android(java)学习笔记110:Java中操作文件的类介绍(File + IO流)

    1.File类:对硬盘上的文件和目录进行操作的类.    File类是文件和目录路径名抽象表现形式  构造函数:        1) File(String pathname)       Creat ...

  5. Java - 文件(IO流)

    Java - 文件 (IO)   流的分类:     > 文件流:FileInputStream | FileOutputStream | FileReader | FileWriter     ...

  6. java中常量文件的配置与读取

    java中常量文件的配置与读取: package com.floor.shop.user.util; import java.io.InputStream; import java.io.InputS ...

  7. java基础11(IO流)-字符流

    转换流 由于字节流操作中文不是特别方便,所以java中提供了转换流 编码表:由现实世界的字符和对应的数值组成的一张表 编码:把看得懂的变成看不懂的(String-------byte[]) 解码:把看 ...

  8. Java中移动文件或目录的方法盘点

    本文不再更新,可能存在内容过时的情况,实时更新请移步原文地址:Java中移动文件或目录的方法盘点: import org.apache.commons.io.FileUtils; import jav ...

  9. Java中删除文件、删除目录及目录下所有文件(转)

    原文链接:Java中删除文件.删除目录及目录下所有文件 知识点:File.delete()用于删除“某个文件或者空目录”!所以要删除某个目录及其中的所有文件和子目录,要进行递归删除,具体代码示例如下: ...

随机推荐

  1. LGOJ3804 【模板】后缀自动机

    题目链接: link 题目大意 给定一个只包含小写字母的字符串\(S\), 请你求出 \(S\) 的所有出现次数不为 \(1\) 的子串的出现次数乘上该子串长度的最大值. Solution 预处理出每 ...

  2. getopt|sys|open|print文件|main()|if __name__ == "__main__"|getline()

    #!/usr/bin/python import sys import getopt import re def compare(f1,f2,o1,o2,si_line): lines_count=0 ...

  3. QT "debugger unknow type"问题解决办法

    windows上使用qt编译有两种,一种是vs的编译器,一种是MinGW的. 这种问题主要是发生在选择了MSVC2013编译器的版本,这个版本的qt需要再装一个调试器,而MinGW不用. 解决办法:下 ...

  4. undefined reference to 问题汇总及解决方法 ----- 还有一种问题没有解决(可能是顺序问题)

    1.链接时缺失了相关的目标文件 2.链接时缺少了相关的库文件 3.链接的库文件中有使用了另一个库文件 4.多个库文件链接顺序问题 5.定义与实现不一致 6.在c++代码中链接C语言的库   转载地址: ...

  5. 分布式Web服务器架构(通俗易通)

    最开始,由于某些想法,于是在互联网上搭建了一个网站,这个时候甚至有可能主机都是租借的,但由于这篇文章我们只关注架构的演变历程,因此就假设这个时候已经是托管了一台主机,并且有一定的带宽了,这个时候由于网 ...

  6. [洛谷P3391] 文艺平衡树 (Splay模板)

    初识splay 学splay有一段时间了,一直没写...... 本题是splay模板题,维护一个1~n的序列,支持区间翻转(比如1 2 3 4 5 6变成1 2 3 6 5 4),最后输出结果序列. ...

  7. 奇异值分解SVD

    在介绍奇异值分解(SVD)之前我们先来回顾一下关于矩阵的一些基础知识. 矩阵基础知识 方阵 给定一个$ n×m $的矩阵$ A $,若n和m相等也就是矩阵的行和列相等那矩阵$ A $就是一个方阵. 单 ...

  8. idea 使用sonarlint报错解决方案

    在idea使用sonarlint可能出现以下报错: Plugin 'org.sonarlint.idea' failed to initialize and will be disabled. Ple ...

  9. SpringMVC引入CSS等文件

    在默认情况下Spring MVC 拦截了所有请求,所以自己要把静态资源配置起来,IDEA 在Spring-service 配置,eclipse在自己新建的SpringMVC配置文件里配置,如下代码 & ...

  10. Jmeter运行不显示cmd对话框

    1.Jmeter运行不显示cmd对话框 如图所示,在Jmeter的bin目录下新建一个vbs的脚本,脚本内容为: Dim wsh Set wsh=WScript.CreateObject(" ...