1.File
包:java.io
构造:
- File(String path);
- File(String parent, String chlid); 一般只会已知父路径的字符串表现形式, 想要找其子路径才会使用
- File(File parent, String child);一般只会已知父路径的File表现形式, 想要找其子路径才会使用
路径写法:
绝对路径:从盘符开始路径 c:/
目录分隔符
- window / ,\ (在java中需要成对出现, 因为java的反斜杠是有特殊含义, 成为转义字符, 想要正常反斜杠需要两根)
- linux /
相对路径:不是以盘符开头, 在我们java基础File, 相对路径相对于项目的跟目录开始的!!!!!!!
功能:
创建相关:
- boolean createNewFile(); 1.只能创建文件不能创建文件夹!!!!!! 一定更要保证文件所在的文件夹存在, 才会创建, 否则会报错: java.io.IOException: 系统找不到指定的路径
- boolean mkdirs(); 创建多级目录 只能创建文件夹,不能创建文件!!!!!
- 结论: 就是不能通过后缀名来判断是文件还是文件夹!!!!!!!!!!
删除相关:
- void delete(); 1.可以删除文件或者文件夹(空文件) 2.删除不走回收站!!!!
获取相关:
- String getName(); 获取文件名或者文件夹的名字 "c:/a/a/a/aa/a/a.txt"
- String getAbsolutePath(); 获取绝对路径 带盘符路径
判断相关:
- boolean isFile(); 关联是否是文件
- boolean isDirectory(); 关联是否是文件夹
- boolean exist();判断关联的路径是否存在!!!!
高级方法:
File[] listFiles();
- 返回文件夹下一级子目录,以数组形式返回
- 文件不能用 非要用, 返回null!!!
- 有权限的文件夹不能用(系统严格的文件夹) 非要用, 返回null!!!
2.Stream(流)
作用: 用来简化数组或者集合的操作
如何将数组和集合转成Stream
- 集合 集合.stream();
- 数组 Stream.of(T ... arr ) 用来转引用数据类型的数组 和Arrays.stream(基本类型数组)
功能:
中间方法:方法调用结束后返回的依然是一个Stream对象, 继续可以使用Stream的功能
- filter(Predicate<T> pre) 根据用户的条件过滤
- limit(long number); 取前几个
- skip(long number); 跳过前几个
- distinct(); 去重 (底层用的是hashcode以及equals)
- static Stream<E> concat(Stream<E> s1, Stream<E> s2); 合并两个流中的元素, 得到新的流
终结方法:方法调用结束后返回的依然不在是一个Stream对象, 不能继续可以使用Stream的功能
- void forEach(Predicate<E> pre);
- long count(); 流中元素的个数
收集方法:(不常用,需要自己定义一个集合对象接收)
- collect(Collectors.toList()); 收集成List集合
- collect(Collectors.toSet()); 收集成Set集合
注意事项
流对象只能被操作一次, 不能操作多次,否则会出异常!!!!!!
缺点: 没有添加和删除的功能, 想要使用, 需要将Stream在转回成集合
3.自定义泛型
泛型类:
作用: 当我们类,方法中,接口中有不确定的数据类型的时候可以使用泛型来描述, 可以让使用者确定数据类型
格式:
public class 类名<MEIJUNJIAN, LINQINGXIA, WANGZUXIAN>{
private MEIJUNJIAN a;
private LINQINGXIA b;
}
确定泛型的时机 :创建对象的时候确定 new A<String, String,Integer>()
注意: 泛型如果不确定, jvm默认帮我们确定成Object
泛型不能滥用, 真的有不确定数据类型的时候在使用, 否则反而会让调用者使用不方便, 比如name和age已经确定类型了, 如果将他们声明成泛型会增加调用者的负担
泛型的命名规则:只要符合合法的标识符就可以
泛型方法:
将泛型定义在方法上面的一种手段
格式:修饰符 <泛型> 返回值类型 方法名(参数列表){
方法体;
return 返回值;
}
使用场景:1. 通过使用在静态方法中, 因为静态方法不能直接使用泛型类中的泛型!!!!!!!
确定泛型的时候 调用一次方法可以确定一次!!!!!!!
泛型接口:将泛型定义在接口上面
格式:public interface 接口名<E>{
void method(E e);
}
使用场景 :接口中如果有不确定的类型的时候可以使用
确定泛型:
1.定义实现类的时候直接确定,一旦确定无法修改 ,这个实现类跟普通类没有任何区别!!!!!!
2.定义实现类的时候继续不确定, 需要将泛型在实现类上继续声明出去,这个实现类和泛型类又一样
概念: 本质就是一种不确定类型的表现形式, 在jdk1.5出现的, 通过<>描述