Map和File类
1. Map双边队列
1.1 Map概述
键值对结构
Key=Value
key不可以重复,一个key对应一个value
value可以重复,但是不得单独存在
常见数据展示/存储方式
MySQL XML JSON HTML..
姓名 苟磊
年龄 16岁
性别 男
家庭住址 唐宁街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集合
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方法的对应文件或者文件夹
【要求】
删除文件夹不为空,无法删除!!!
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 文件列表方法
package com.qfedu.b_file;
import java.io.File;
public class Demo7 {
public static void main(String[] args) {
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[] 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. 有可能出现后缀名是大写!!!