Java.Map和File类

Map双边队列

什么是Map

键(Key)值(Value)对
邓超 = 娘娘
贝克汉姆 = 维多利亚
黄磊 = 孙莉
吴京 = 谢楠
表格:
姓名:XX
年龄:16
性别:男
程序开发大部分数据都是键值对形式的,MySQL JSON XML 类对象成员变量和存储的数据从前端发送的数据也可以转成Map格式。
==> 一键生成 ==> 类对象 ==> 一键存储 ==> 数据库

interface Map<K, V>

class HashMap<K, V> 哈希表结构

class TreeMap<K, V> 底层是树形结构,存储要求K有对应的排序方式

Map双边队列中键(Key)是唯一的,但是值(Value)可以重复

Map<K, V>双边队列方法

增:

put(K k, V v);
存入一个键值对类型,K和V都要符合泛型约束

putAll(Map<? extends K, ? extends V> map);
存入另一个Map双边队列,并且要求添加的Map双边对接中的K和V都要和当前Map中存储
的K和V一致

删:

remove(Object k);
删除对应K的键(Key)值(Value)对

改:

put(K k, V v);
对应当前K存在,修改对应内容

查:

int size();
当前Map双边队列中,有效键值对个数

boolean isEmpty();
是否为空

boolean containsKey(Object key);
判断指定的Key是否存在

boolean containsValue(Object value);
判断指定Value是否存在

Set<K> keySet();
返回整个Map双边队列中所有Key对应的Set集合【注意】一个方法使用set结尾,表示该
方法返回的是一个集合类型,大多是情况下都是Set类型

Collection<V> values();
返回整个Map双边队列中所有Value对应的Collection集合【注意】方法名如果是一个复
数,返回值类型集合或者是数组情况居多

EntrySet

Entry 可以认为是键值对对象
定义在Map类内

class Entry<K, V> {
	K k;
	V v;
}

K,V是完全依赖于Map约束的,这里可以Entry里面保存的是每一个键值对类对象
Map中提供了一个方法

Set<Entry<K, V>> entrySet
返回值是键值对类对象Set集合
Set集合中存储的是Entry类型
Entry类型是带有泛型的
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Demo2 {
	public static void main(String[] args) {
		HashMap<String, String> map = new
		HashMap<String, String>();
		map.put("吴京", "谢楠");
		map.put("邓超", "娘娘");
		map.put("黄磊", "孙莉");
		map.put("王宝强", "XX");
		Set<Map.Entry<String, String>> entrySet = map.entrySet();
		System.out.println(entrySet);
	}
}

TreeMap<K, V> 以 及 Comparable 和 Comparator

K是需要有对应的比较方式,如果没有比较方式,无法存入。
推荐使用Comparator接口

import java.util.Comparator;
import java.util.TreeMap;
public class Demo3 {
	public static void main(String[] args) {
		TreeMap<String,String> map = new
		TreeMap<String, String>();
		map.put("李四", "1");
		map.put("王五", "1");
		map.put("赵六", "1");
		map.put("张三", "1");
		System.out.println(map);
		TreeMap<Dog,String> map2 = new
		TreeMap<Dog, String>(new Comparator<Dog>() {
			@Override
			public int compare(Dog o1, Dog o2) {
				return o1.getAge() - o2.getAge();
			}
		});
		map2.put(new Dog("王可可", 1), "111");
		map2.put(new Dog("八公", 2), "111");
		map2.put(new Dog("豆豆", 3), "111");
		map2.put(new Dog("老黄", 4), "111");
		map2.put(new Dog("旺财", 5), "111");
		System.out.println(map2);
	}
}

File 类

什么是File类

File 类是SUN公司提供给开发者操作文件和文件夹的一个类对象。
Java中万物皆对象,计算机中万物皆文件
获取File类有三种方式【Constructor 构造方法】
File(String pathName);

根据对应的文件路径创建获取对应的File类对象,可以是文件,可以是文件夹。

File(String parent, String child);

根据对应的父目录文件夹路径,以及子文件名或者子文件夹名,创建对应的File类对象

File(File parent, String child);

根据对应的父目录文件夹File类对象,以及子文件名或者子文件夹名,创建对应File类对象

路径:相对路径
. 所表示的是当前工作目录
. . 父目录/上级目录
正对于当前工作目录和其他文件或者文件夹之间的最小路径

绝对路径:唯一的路径。
Windows操作系统 C D E F… 每一个盘符都是一个根目录开始C:/Windows/System32 或者是Linux UNIX macOS存在一个 / 目录文件
/user/liuxiaolei/appliction

路径有一个很重要的东西:路径分隔符
Windows 分隔符 默认是 \
Linux UNIX macOS 分隔符 默认是 /
Windows是支持Linux分隔符 / 没有任何问题
根据当前系统来区分不同的分隔符
File.separatorChar

import java.io.File;
/*
* 创建File类对象
*/
public class Demo1 {
	public static void main(String[] args) {
/*
* 1. 路径分隔符 \\ or / or File.separator
* 2. 操作文件必须带有文件的后缀名 1.txt  2.java ...
*/
		File file = new File("C:\\aaa");
		File file1 = new File("C:" + File.separator + "aaa");
		File file2 = new File("C:/aaa", "1.txt");
		File file3 = new File(file, "bbb");
	}
}

创建文件和文件夹

boolean createNewFile();

通过File类对象调用,创建对应File类对象中保存的路径的普通文件。创建成功返回true,
创建失败返回false

返回false的原因:

  1. 路径不合法。
  2. 对应的文件夹没有写入权限。 rwxr-xr-x
  3. 对应当前的文件已经存在。

boolean mkdir();

通过File类对象调用,创建对应File类对象中保存路径的文件夹创建成功返回true,创
建失败返回false

返回false的原因:

  1. 路径不合法。
  2. 对应的文件夹没有写入权限。
  3. 对应当前的文件夹已经存在。

boolean mkdirs();

通过File类对象创建其中保存的文件目录的所有对应文件夹,包括中间路径如果创建失败,
返回false

boolean renameTo(File dest);

通过File类对象调用,转为目标File类对象dest文件/文件夹移动,重命名

删除文件或者文件夹

boolean delete();
通过File类对象调用,删除对应的文件或者文件夹
【要求】

  1. 删除的文件或者文件夹都是直接抹掉数据,不是放入回收站
  2. 无法删除非空文件夹,文件夹中存在其他内容无法整体删除。

void deleteOnExit();
程序退出时删除对应的文件或者文件夹用于删除程序运行过程中,留下的日志文件,缓冲文件,操作日志…

文件属性判断[有用]

boolean isFile();
判断是否是一个普通文件

boolean isDirctory();
判断是否是一个文件夹

boolean isAbsolute();
判断是否使用了绝对路径

boolean isHidden();
判断是否是隐藏文件

boolean exists();
判断文件是否存在

获取文件属性

唬人方法
以下方法和文件是否存在没有一分钱关系,都可以使用字符串操作直接得到我们想要的结果
String getPath();
获取File类对象保存的路径

String getName();
获取当前File类对象中保存的文件名或者文件夹名

String getParent();
获取当前File类对象对应文件或者文件夹的父目录路径

String getAbsolutePath();
获取当File类对象对应文件或者文件夹的绝对路径

有用方法:

long lastModified();
获取文件的最后一次修改时间,返回值是一个时间戳类型。
从1970年01月01日 00:00:00到现在的秒数。计算机元年

long length();
获取文件的大小,占用硬盘空间字节数。如果操作的是文件夹,返回0L。

列表方法

static File[] listRoots();
通过File类调用,有且针对于Windows操作系统有效,获取当前电脑内所有根盘符对象,如果是Linux,UNIX,macOS是无效的。

File[] listFiles();
通过File类对象调用,获取当前File类对象对应文件夹下的所有子文件或者子文件夹的File类对象数组

String[] list();
通过File类对象调用,获取当前File类对象对应文件夹下的所有子文件或者子文件夹的String类型文件名或者文件夹名字数组

FilenameFilter文件名过滤器

interface FilenameFilter
boolean accept(File dir, String name);

@FunctionalInterface
public interface FilenameFilter {
/**
* Tests if a specified file should be included in a file list.
*
* @param dir the directory in which the file was found.
* @param name the name of the file.
* @return <code>true</code> if and only if the name should be
* included in the file list;
<code>false</code> otherwise.
*/
	boolean accept(File dir, String name);
}

import java.io.File;
import java.io.FilenameFilter;

/*
* FilenameFilter过滤器演示
*/
public class Demo8 {
	public static void main(String[] args) {
		File file = new File("C:\\aaa\\ddd");
		// 使用匿名内部类的匿名对象直接作为方法的参数
		File[] listFiles = file.listFiles(new FilenameFilter() {
			@Override
			public boolean accept(File dir, String name) {
				/*
				* dir是当前操作的文件夹类对象
				* name是当前文件夹下的子文件或者子文件夹名字
				*
				* 获取对应的java文件
				* 1. 判断是不是普通文件
				* 2. 判断当前文件名是不是.java结尾
				*/
				return new File(dir, name).isFile()
				// endsWith字符串方法,判断当前字符串是不是已指定要求结尾
				&& name.endsWith(".java");
				}
		});
		// Lambda表达式 JDK1.8新特征
		File[] listFile = file.listFiles((dir, name) ->new File(dir, name).isFile() && name.endsWith(".java"));
		for (File file2 : listFile) {
			System.out.println(file2.getName());
		}
	}
}

常用API – String

String字符串冗余问题

String str = "孜然肉片";
str += "麻辣香锅";
str += "番茄鸡蛋";
str += "土豆牛肉";
str += "烤羊排";
str += "金汤肥牛";
str += "蒜蓉油麦菜";
System.out.println("这里有几个字符串");

/*
					这里有14个字符串
使用双引号包含的字符串都是字符串常量!!!常量的概念中要求不可以修改。
双引号包含的字符串都是存在于内存的【数据区】
+ 在字符串常量操作时,使用原本的两个字符串拼接之后完成的一个新的字符串常量。
这里导致的字符串冗余问题,后期会使用StringBuffer StringBuilder来解决问题
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值