IO框架--java

流的概念

内存与存储设备之间传输数据的通道

流的分类

按方向分类

  • 输入流:从存储设备到内存中
  • 输出流:从内存到存储设备中

按照单位分类

  • 字节流
    以字节为单位,可以读写所有数据
  • 字符流
    以字符为单位,只能读写文本数据

按照功能分类

  • 节点流
    具有实际传输数据的读写功能
  • 过滤流
    在节点流的基础之上增加功能

字节流(抽象类)

InputStream:字节输入流(read)

子类:FileInputStream()

OutputStream:字节输出流(write)

子类:FileOutputStream()

字节缓冲流

BufferedInputStream

BufferedOutputStream

对象流

  • 增强了缓冲区功能
  • 增强了读写8中基本数据类型和字符串功能
  • 增强了读写对象的功能:
    • readObject() 从流中读取一个数据(反序列化)
    • writeObject()向流中写入一个数据(序列化)
  • 使用传输对象的过程成为序列化,和反序列化

ObjectInputStream

ObjectOutputStream

编码方式

字符流

字符流的父类(抽象类)

Reader:字符输入流

FileReader

Writer:字符输出流

字符缓冲流:BufferedReader/BufferedWriter

  • 高效读写
  • 支持输入换行符
  • 可一次写一行、读一行

打印流:print()/println()

  • 支持写入后换行
  • 支持数据原样打印

转换流:InputStreamReader/OutputStreamWriter

  • 可将字节流(硬盘)转换为字符流(内存)
  • 可设置字符的编码方式

File类

代表物理盘符中的一个文件或者文件夹

文件相关操作

package com.fileall;

import java.io.File;
import java.util.Date;

/**
 * File类的使用
 * (1)分隔符
 * (2)文件操作
 * (3)文件夹操作
 * @author qiqi
 */
public class Demo01 {
    public static void main(String[] args) throws Exception {
        separator();
        fileOpe();
    }
//    (1)分隔符
    public static void separator(){
        System.out.println("路径分隔符"+ File.pathSeparator);    //;
        System.out.println("名称分隔符"+ File.separator);    //\
    }
//    (2)文件操作
    public static void fileOpe() throws Exception{
//        1.创建文件
        File file = new File("E:\\自学JAVA\\javatest\\file.txt");
        System.out.println(file.toString());
        if (!file.exists()){
            boolean b = file.createNewFile();
            System.out.println("创建结果:"+b);
        }

//        2.删除文件
//        2.1直接删除
//        System.out.println("删除结果:"+file.delete());

//        2.2使用jvm退出时删除
//        file.deleteOnExit();
//        Thread.sleep(5000);

//        3.获取文件信息
        System.out.println("获取文件的绝对路径:"+file.getAbsolutePath());
        System.out.println("获取路径:"+file.getPath());
        System.out.println("获取文件名称:"+file.getName());
        System.out.println("获取父目录:"+file.getParent());
        System.out.println("获取文件长度:"+file.length());
        System.out.println("获取文件的创建时间:"+new Date(file.lastModified()));

//        4.判断
        System.out.println("是否可读:"+file.canRead());
        System.out.println("是否可写:"+file.canWrite());
        System.out.println("是否是文件:"+file.isFile());
        System.out.println("是否隐藏:"+file.isHidden());

    }
}

文件夹相关操作

    public static void directoryOpe() throws Exception{
//        1.创建文件夹
        File dir = new File("E:\\自学JAVA\\javatest02\\aaa");
        System.out.println(dir);
        if (!dir.exists()){
//            dir.mkdir();    //只能创建单级目录
            System.out.println("创建结果:"+dir.mkdirs());   //可以创建单级目录
        }
//        2.删除文件夹
//        2.1直接删除(注意只能删除空目录)
//        System.out.println("删除结果:"+dir.delete());

//        2.2使用jvm删除
//        dir.deleteOnExit();
//        Thread.sleep(5000);

//        3.获取文件夹信息
        System.out.println("获取绝对路径:"+dir.getAbsolutePath());
        System.out.println("获取路径:"+dir.getPath());
        System.out.println("获取文件夹的名称:"+dir.getName());
        System.out.println("获取父目录:"+dir.getParent());
        System.out.println("获取创建时间:"+new Date(dir.lastModified()));

//        4.判断
        System.out.println("是否是文件夹:"+dir.isDirectory());
        System.out.println("是否是隐藏的:"+dir.isHidden());

//        5.遍历文件夹
        File dir2 = new File("E:\\毕业设计\\单品 套餐");
        String[] files = dir2.list();
        System.out.println("------------------------------");
        for (String string : files){
            System.out.println(string);
        }

FileFilter接口

可以过滤不满足要求的文件
 System.out.println("=======FileFilter接口的使用==========");
        File[] files2 = dir2.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                if (pathname.getName().endsWith(".jpg")) {
                    return true;
                }
                return false;
            }
        });
        for (File file:files2){
            System.out.println(file.getName());
        }

Properties:属性集合

  1. 存储属性名和属性值
  2. 属性名和属性值都是字符串类型
  3. 没有泛型
  4. 和流有关
package com.fileall;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.util.Properties;
import java.util.Set;

/**
 * 演示Properties集合的使用
 * @author qiqi
 */
public class Demo02 {
    public static void main(String[] args) throws Exception{
        //1.创建集合
        Properties properties = new Properties();
//        2.添加数据
        properties.setProperty("username","张三");
        properties.setProperty("age","20");
        System.out.println(properties);
//        3.遍历
//        3.1------------keyset------------
        Set<Object> objects = properties.keySet();
        for (Object s:objects){
            System.out.println((String) s);
        }
//        3.2-----------entrySet ----------
        Set<String> set = properties.stringPropertyNames();
        for (String s2:set){
            System.out.println(s2);
        }
//        3.3 stringPropertyNames()
        Set<String> propertyNames = properties.stringPropertyNames();
        for (String pro : propertyNames){
            System.out.println(pro+"========="+properties.getProperty(pro));
        }
//        3,4 和流有关的方法
//        -------list方法--------
//        PrintWriter pw = new PrintWriter("E:\\自学JAVA\\javatest\\print.txt");
//        properties.list(pw);
//        pw.close();
//        ----------2.store保存----------
        FileOutputStream fos = new FileOutputStream("E:\\自学JAVA\\javatest\\print.propertise");
        properties.store(fos,"注释");
        fos.close();
//        ------------3.load方法加载--------------
        Properties properties2 = new Properties();
        FileInputStream fis = new FileInputStream("E:\\自学JAVA\\javatest\\print.propertise");
        properties2.load(fis);
        fis.close();
        System.out.println(properties2);
    }
}

你可能感兴趣的:(java,开发语言)