美文网首页java基础
java基础-day19-Map和File类

java基础-day19-Map和File类

作者: 触手不可及 | 来源:发表于2021-06-27 08:55 被阅读0次

Map和File类

1. Map双边队列

1.1 Map概述
键值对结构
    Key=Value
    key不可以重复,一个key对应一个value
    value可以重复,但是不得单独存在
    
    常见数据展示/存储方式
        MySQL XML JSON HTML..
        姓名 彭于晏
        年龄 26岁
        性别 男
        家庭住址 唐宁街10号

Map结构大量的使用在数据传输的过程中,包括从前端到Java Servlet
    Map request.getParameterMaps(); [后期很常用]
    BeanUtils.populate(Object bean, Map keyValue) [用的很开心]
1.2 Map组织架构
interface Map<K, V> 
    泛型要求约束两个数据,一个对应键 K 一个对应值 V
--| class HashMap<K, V>
    底层存储数据的结构是一个哈希表结构,存储依赖于键(Key);
--| class TreeMap<K, V>
    底层存储数据的结构是一个二叉树结构,存储比较要求比较内容是键(Key);

涉及到的方法
增
    put(K k, V v);
        添加符合Map要求的键值对数据到Map双边队列中。【存在泛型约束】   
    putAll(Map<? extends K, ? extends V> map);
        添加一个Map双边队列对象到当前Map中,要求参数Map存储的K和V符合当前调用
        方法的Map对象要求。
    
删
    remove(Object key); 
        根据指定Key删除对应的键值对
    clear();
        清空整个Map双边队列
改
    put(K k, V v);
        如果键存在,修改对应的value,如果键不存在,添加对应键值对。
查
    int size();
        当前Map双边队列中的键值对个数
    int isEmpty();
        判断当前Map双边队列键值对是否`为空 return 0 == size();
    boolean containsKey(Object key);
        判断指定Key是否在当前Map双边队列中存在
    boolean containsValue(Object value);
        判断指定Value是否在当前Map双边队列中存在
    Set<K> keySet();
        返回当前Map双边队列中Key对应的Set集合
       [注意]一个方法使用set结尾,表示该方法返回的是一个集合类型,多数情况下都是set类型
    Collection<V> values();
        返回当前Map双边队列中Value对应的Collection集合
       [注意] 方法名如果是一个复数,返回值类型集合或者数组情况居多
    V get(Object key);
        根据对应Key获取对应的value

单独学习方法:【重头戏】
    Set<Map.Entry<K, V>> entrySet();
        Entry ==> 键值对 
            class Entry<K, V> {
                K k;
                V v;
            }
            Entry可以认为是Map双边队列的【成员内部类】
            Entry是一个键值对对象。
    Entry键值对数据类型中存在的方法
        K getKey();
            获取键值对中Key对应数据
        V getValue();
            获取键值对中Value对应数据
        v setValue(V v);
            修改键值对Value数据

2. File类

2.1File类概述
File是SUN公司提供给Java程序员操作文件或者文件夹的一种方式,并且提供了对应的
    增删改查方法。

相对路径
    从当前工作目录去往其他目录的一个【相对路径】
    这里会使用到 . 和 ..
    . 表示当前工作目录
    .. 表示当前工作目录的上级目录
    正对于当前工作目录和其他文件或者文件夹之间的最小路径
    
绝对路径
    从根盘符或者根目录去往指定文件或者文件夹的绝对路径,并且是一个【唯一路径】
    Linux中采用的方式是根目录方式,也是Java WEB项目采用方式!!!
    windows操作系统中是存在盘符。

File类构造方法
    File(String pathName);
        根据指定的路径直接创建对应的File类对象,可以是文件,可以是文件夹
    File(String parent, String child);  
        根据指定父目录String路径,和子文件或者子文件夹名字创建对应的File类对象
    File(File parent, String child);    
        根据父目录File类对象,和子文件或者子文件夹名字创建对应的File类对象
2.2 创建文件和文件夹
boolean createNewFile();
    通过File类对象调用,创建File类对象对应的普通文件
    创建成功返回true,失败返回false
    失败原因
        1. 路径不合法
        2. 对应文件已存在
        3. 对应路径文件夹没有写入权限。
            Linux
                drwxrwxrwx 
                d ==> 文件夹
                r ==> 可读
                w ==> 可写
                x ==> 可执行
                - ==> 未拥有当前权限
                三个为一组 拥有者 同组人 访客
                drwxr-xr-x 文件夹
                -rwxr-xr-x 普通文件
                
boolean mkdir();
    通过File类对象调用,创建File类对象对应的文件夹
    创建成功返回true,失败返回false
    
boolean mkdirs();
    BT方法
    通过File类对象调用,创建File类对象对应的文件夹。并且在条件允许的情况下,可以
    创建目标文件夹之前的中间文件夹。
boolean renameTo(File dst);
    移动,重命名,移动重命名
    通过File类对象调用,文件最终目标为dst参数File类对象。
2.3 删除文件或者文件夹
boolean delete();
    通过File类对象调用,删除调用当前delete方法的对应文件或者文件夹
    【要求】
        1. 删除的文件或者文件夹都是直接抹掉数据,不是放入回收站
        2. 无法删除非空文件夹,文件夹中存在其他内容无法整体删除
void deleteOnExit();
    通过File类对象调用,给予对应文件或者文件夹一个删除标记,当前程序彻底退出之后,在进行删除操作
    一般用于程序在正常退出之后,删除当前程序的缓冲文件,操作日志...从而节约磁盘空间
【注意】
    以上删除操作,都是从电脑中,直接抹掉数据!!!
2.4 获取文件或者文件夹属性方法
以下方法是唬人的,和当前文件或者文件夹是否存在完全无关:
    String getPath();
        获取当前File类对象创建使用路径
    String getName();
        获取当前File类对象对应的文件名字或者文件夹名字
    String getParent();
        获取当前File类对象对应文件或者文件夹的上级目录路径
    String getAbsolutePath();
        获取当前File类对象对应文件或者文件夹的绝对路径[有点用!!!]

有用方法:
    long length();
        返回当前文件占用的硬盘空间字节数,
        如果是文件夹返回值有可能是0L有可能是4096L
    long lastModified();
        最后一次修改时间,返回值类型是long类型,时间戳
        1970年01月01日 00:00:00 到 指定时间的秒数
        目前中国采用的时区是北京的东8区
2.5 判断方法【重点】
boolean exists();     
    判断文件或者文件夹是否存在
boolean isFile();
    判断是否是普通文件
boolean isDirectory();
    判断是否是文件夹
boolean isHidden();
    判断是否是隐藏文件或者文件夹
boolean isAbsolute(); 
    判断当前路径对应的文件或者文件夹是否是绝对路径
2.6 文件列表方法
static File[] listRoots();
    通过File类调用,有且针对于windows操作系统有效,获取当前电脑内所有跟盘符对象,如果是Linux,UNIX,macOS是无效的
    
File[] listFiles();
    通过File类对象调用,获取当前File类对象对应文件夹下的所有子文件或者子文件夹的File类对象数组
        
String[] list();
    通过File类对象调用,获取当前File类对象对应文件夹下所有子文件或者子文件夹的String类型文件名或者文件夹名字数组
package com.qfedu.b_file;

import java.io.File;

public class Demo7 {
    public static void main(String[] args) {
        /*
         * 有且只针对于Windows操作系统,可以获取当前电脑中的所有盘符
         */
        File[] listRoots = File.listRoots();
        for (File file : listRoots) {
            System.out.println(file);
        }
        
        System.out.println();
        
        File file = new File("D:\\Program Files\\Java\\jdk1.8.0_241");
        /*
         * 获取当前指定目录下的所有子文件和子文件夹名字
         */
        String[] list = file.list();
        for (String string : list) {
            System.out.println(string);
        }
        
        System.out.println();
        
        /*
         * 获取当前指定目录下所有子文件和子文件夹的File对象数组
         */
        File[] listFiles = file.listFiles();
        for (File file2 : listFiles) {
            System.out.println(file2);
        }
    }
}

2.7 文件名过滤器
项目中使用的过滤器
    interface MyFilter {
        boolean accept(Worker w1);
    }

文件列表操作中也存在使用文件名过滤器
    
FilenameFilter
    需要完成的方法
    boolean accept(File dir, String fileName);
    dir:
        当前过滤操作的文件夹File类对象
    fileName:
        当前文件夹下的子文件名或者子文件夹名

需求:
    在指定目录下只获取Java文件!!!
    1. 首先必须是一个文件
    2. 要求当前文件的拓展名必须是一个.java
    3. 有可能出现后缀名是大写!!!

相关文章

网友评论

    本文标题:java基础-day19-Map和File类

    本文链接:https://www.haomeiwen.com/subject/brbnyltx.html