Java IO流和File类详解

一.Java IO流:

当需要把内存中的数据存储到持久化设备(硬盘、光盘、U盘等)上这个动作称为输出(写)Output操作。

当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作。

因此我们把这种输入和输出动作称为IO操作。

1.File类:

           ————*File类

------1.定义及构造方法:
import java.io.File;

/*
 * java.io.File
 * 表示操作系统上 文件  目录 路径名的类
 * 文件:File 存储数据
 * 目录:Directory 文件夹 存储文件 区分文件
 * 路径:Path 路径 定位文件文件夹
 * File类特点:平台无关性
 * 
 * File类的静态常量
 * static String pathSeparator 与系统有关的路径分隔符
 * static String separator 与系统有关的默认名称分隔符
 * 
 * 
 * uri 统一资源标识符
 *        包括url
 *      thrunder:
 *      ed2k:
 *      mailto:123@qq.com
 * 
 * url 统一资源定位符
 *        http:\\www.baidu.com
 * 
 /*
 ------File的构造方法
 * 
 * 绝对路径
 *         从盘符开始的路径都是绝对路径  绝对路径具备唯一性 
 *         d:\\work\\abc
 * 相对路径
 *         d:\\work\\abc
 *         d:\\work
 *         d:\\work\\day04
 * 
 *         父路径具备唯一性  子路径没限制
 */
public class Demo02_File {

    public static void main(String[] args) {
        /*
         *  File(String path)
         * 根据字符串路径 创建一个File对象
         * 路径可以是文件 也可以是文件夹
         * 创建对象时,不会验证该路径是否存在
         * 
         */


 ----- File类创建方法
 * 
 * windows不区分大小写
 * 不可以用后缀名 判断一个文件 是文件还是文件夹
 * 即使类型不同 名字也不能完全一样
 * 


 ------- File的删除方法 
 *         boolean delete()  可以删除文件或文件夹 
 *                              删除成功true 删除失败为false
 *                              要删除的文件路径在构造方法中给出
 *                           java的删除一般都不走回收站 
 *                               永久性删除
 *                               操作有风险 运行需谨慎
 *                           如果删除的是文件 即使文件中有数据 也会被删除
 *                          但是如果删除的是文件夹 如果文件夹内有东西 删除不掉
 *                          
 */

------File类的判断方法
    /*
         * boolean exists() 
         * 判断路径是否存在
         * 如果存在返回 true 如果不存在返回false
         */

    判断当前路径是否是文件夹
         * boolean isFile()
         * 判断当前路径是否是文件
         * 如果是文件返回true 
         * 但是如果 文件不存在返回
false
         * 如果文件是文件夹返回false
         */


------- File的获取方法
         *     File getAbsoluteFile() 推荐
         *  String getAbsolutePath() 
         *  获取文件对象的绝对路径
         */

        /*
         *  String getPath() 
         *  获取文件路径的方法
         *  获取在构造方法中给出的路径的字符串
         */
/*
         *  String getParent() 
         *  File getParentFile() 
         *  获取父目录
         */

        /*
         *  String getName()  
         *  获取文件名 
         */
/*
         * long length() 
         * 获取文件的字节数
         * 不能返回文件夹的
         */
-----2 File类list开头的方法
String[] list() 返回当前文件夹下 所有的文件名的数组  包含隐藏文件
 *  File[] listFiles() 返回当前文件夹下 所有文件的对象
 *  
 *  static File[] listRoots() 返回计算上所有的盘符
-------3.文件过滤器
 文件过滤器
 * 获取一个文件夹下所有.java文件
 * File[] listFiles(FileFilter filter) 
 */

2.字节流图解:

字节输出流 OutputStream
    特点: 写任意的文件
    方法: 写出数据的方法: write
        write(int b) 写出1个字节  127 -128 之间
        write(byte[] b) 写出字节数组
        write(byte[] b,int off,int len) 写出字节数组一部分 开始索引,写出的个数
        close() 关闭流,释放资源
    子类: FileOuputStream
        构造方法:
             FileOutputStream(File file) 传递File对象,数据目的
             FileOutputStream(String filename) 传递字符串的文件名作为数据目的
 
    IO字节流写数据步骤
         1. 创建流对象的对象,构造方法中绑定数据目的
         2. 调用方法write写
         3. 关闭资源

字节输入流 InputStream
    特点:读取字节数据,读取任意的文件
    方法: 读取数据的方法:read
        int read() 读取1个字节        
        int read(byte[] b) 读取字节数组
    子类: FileInputStream
         构造方法: 
            FileInputStream(File file)传递File对象,此流读取的数据源
            FileInputStream(String filename)传递字符串文件名,此流读取的数据源

    输入流读取数据步骤
         1. 创建字节输入流对象,构造方法中,绑定数据源
         2. 调用方法read读取
        3. 输出读取的结果
        4. 释放资源
      
    注意:read(): 调用一次,自动向后读1个字节,文件末尾-1

字节输出流的缓冲流:
    java.io.BufferedOutputStream
    继承OutputStream 就是一个字节输出流
    方法: 来自于父类OutputStream
    write  字节, 字节数组
    构造方法:
    BufferedOutputStream (OutputStream out)
    传递我任意的字节输出流,传递来的是谁,就缓冲谁,提高效率
    只能传递 FileOutputStream
 

字节输入流的缓冲流 
    java.io.BufferedInputStream
    继承InputStream, 也是字节输入流
    读取的方法: read 单个字节,字节数组
     构造方法:
    BufferedInputStream (InputStream in)
    传递任意的字节输入流,传递的是谁,就对谁高效 FileInputStream

     
    ___________字符转换流_______________

       ——*OutputStreamWriter类


 java.io.OutputStreamWriter extends Writer 
 字符通往字节的桥梁
 * 特点 可以指定编码表  继承了Writer所以可以使用父类的write方法
                 write一个字符
                 write一个字符数组                 write一个字符数组的一部分
                  write一个字符串
 * 构造方法 绑定数据目的
        OutputStreamWriter(OutputStream out) 
         OutputStreamWriter(OutputStream out, String charsetName) 
        参数
           OutputStream out 所有字节输出流的超类,可以传入其任意子类对象
                            FileOutputStream
            String charsetName 指定字符串类型的编码表,编码表不区分大小写
                               UTF-8 GBK


    ——*    InputStreamReader类
ava.io.InputStreamReader extends Reader  字节通往字符的桥梁
 * 特点 可以指定编码 继承自Reader可以调用Reader的read方法
 *             read一个字符
 *             read一个字符数组
 * 
 * 构造方法
 *             InputStreamReader(InputStream in)
 *             InputStreamReader(InputStream in, String charsetName)
 *             参数
 *                 InputStream in 所有字节输入流的超类,可以传入其任意子类对象
 *                                FileInputStream
 *              String charsetName 指定字符串类型的编码表,编码表不区分大小写
 *                                UTF-8 GBK


        ——*对象的序列化流
ObjectOutputStream:
构造方法:

 *         ObjectOutputStream(OutputStream out)
 *         参数    
 *             OutputStream out 所有字节输出流超类,可以传入其任意子类对象
 *                              FileOutputStream
 * 方法
 *         void writeObject(Object obj) 写对象
  
         ——*对象的反序列化流
 java.io.ObjectInputStream :

 * 构造方法
 *         ObjectInputStream(InputStream in)
 *         参数
 *             InputStream in 所有字节输入流的超类,可以传入其任意子类对象
 *                            FileInputStream
 * 方法
 *         Object readObject() 读对象
 * 

        ——打印流——
    ——*字节打印流 PrintStream
    ——*字符打印流 PrintWriter(常用)

打印流的特点:1.只负责输出目的端
         2.打印流不会抛出IO异常 可能抛其他异常
         3.打印流为其他流添加了功能
 构造方法绑定数据目的

      * PrintStream构造方法可以接收:
        String路径   File对象  所有字节输出流

      * PrintWriter构造方法可以接收:
        String路径  
        File对象 
        所有字符输出流 所有字节输出流

    *方法:
      void print(xxx xx) 不换行打印  原样输出
        void println(xxx xx) 换行打印
 
    *打印流可以开启自动刷新:
         前提
    1.构造方法必须接收的是流对象:
    PrintWriter(OutputStream out, boolean autoFlush) 
    PrintWriter(Writer out, boolean autoFlush) 
         如果 
          autoFlush为true 则开启了自动刷新
       2.只有 printf println format三个方法可以自动刷新
 


    ———Properties属性集合类(双列集合)———
   *—特点:
    
     1、Hashtable的子类,map集合中的方法都可以用。
     2、该集合没有泛型。键值都是字符串。
     3.唯一一个可以和IO流直接结合使用

   *—方法:
    setProperty(String key, String value) 添加元素
   String getProperty(String key)   根据键找值        
 Set<String> stringPropertyNames() 获取所有key的Set集合
 
   *—Properties和IO流结合使用
   方法:
   void load(InputStream inStream) 将文件中的键值对加载进集合
   void load(Reader reader) 
       参数:
       任意输入流对象  字节输入流 字符输入流
  
    void store(OutputStream out, String comments)  将集合中的键值对 写入文件中
     void store(Writer writer, String comments) 
      参数:
      任意输出流对象  字节输出流 字符输出流
 

    ——— commons.io.(非系统包)
导包:import org.apache.commons.io.FileUtils;
   *—FileUtils类的方法:
   1. static String readFileToString(File file) 读取文件转换为字符串
   2.static void writeStringToFile(File file, String data) 将字符串写入文件
 
3.static void  copyFile(File srcFile, File destFile)  复制文件

   4.static void copyDirectoryToDirectory(File srcDir, File destDir) 复制多级文件夹
   

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值