Java编程小知识

1. Java System.getProperty("java.io.tmpdir") 获取系统临时目录

System.getProperty("java.io.tmpdir") 是获取操作系统的缓存临时目录

在windows7中的目录是:

C:\Users\登录用户~1\AppData\Local\Temp\

在linux下的目录是:

/tmp

可以获取系统的配置信息,下面说一下System.getProperty()的参数有那些:

java.version Java运行时环境版本
java.vendor Java运行时环境供应商
java.vendor.url Java供应商的 URL
java.home Java安装目录
java.vm.specification.version Java虚拟机规范版本
java.vm.specification.vendor Java虚拟机规范供应商
java.vm.specification.name Java虚拟机规范名称
java.vm.version Java虚拟机实现版本
java.vm.vendor Java虚拟机实现供应商
java.vm.name Java虚拟机实现名称
java.specification.version Java运行时环境规范版本
java.specification.vendor Java运行时环境规范供应商
java.specification.name Java运行时环境规范名称
java.class.version Java类格式版本号
java.class.path Java类路径
java.library.path 加载库时搜索的路径列表
java.io.tmpdir 默认的临时文件路径
java.compiler 要使用的 JIT 编译器的名称
java.ext.dirs 一个或多个扩展目录的路径
os.name 操作系统的名称
os.arch 操作系统的架构
os.version 操作系统的版本
file.separator 文件分隔符(在 UNIX 系统中是“/”)
path.separator 路径分隔符(在 UNIX 系统中是“:”)
line.separator 行分隔符(在 UNIX 系统中是“/n”)
user.name 用户的账户名称
user.home 用户的主目录
user.dir 用户的当前工作目录
  1. 用commons-lang.jar中的StringUtils.isNotEmpty()判空, 代替null和""的比较
  2. String substring(int beginIndex, int endIndex) 截取的范围是左闭右开[beginIndex, endIndex)

4.Boolean.getBoolean("xxx")获取系统属性并解析为boolean值,看源代码可知,与parseBoolean()功能完全不同。详细

  1. ClassLoader.getResourceAsStream(String path)获取不到classpath下的文件,是因为没有将resource标记为Test Resource Root就可以了,查看编译后的代码,可以看到Resource目录下的xml文件被放置到了classpath下,这样也就可以正常获取了。
文件结构

标记目录为Test Resource Root

image.png

因此,检查ClassLoader.getResourceAsStream(String path)方法的文件路径是否正确,不应该去java文件所在的目录下检查是否存在该文件,应该去检查class文件所在的根路径下(classpath)是否存在该文件,java项目就去bin目录下,maven项目就去target\classes目录和target\test-classes目录下检查文件是否存在

6.Collectors.toMap()方法中value不能为null,因为Map不允许null作为值,因为如果你在Map中查找键k并且它不存在,那么返回的值已经是null(参见javadoc)。具体报错原因参考Collectors源码

    public static void main(String[] args) {
        List userList= new ArrayList<>();

        userList.add(new User(1, "mccree"));
        userList.add(new User(2, "tracer"));
        userList.add(new User(3, null));

        // 这行代码会报NPE,因为
        Map userMap =
        userList.stream().collect(Collectors.toMap(User::getId, User::getName));
    }

https://stackoverflow.com/a/53185359/6528237

  1. 获取classpath下的资源文件的绝对路径
    // 使用classpath相对路径
    if (conf.contains("classpath:")) {
        conf = conf.replace("classpath:", this.getClass().getResource("/").getPath());
    }
  1. TreeMap.lastKey()是获取key最大的Entry,而不是最后一次插入的Entry 示例
    TreeMap是基于红黑树的实现的排序Map,对于获取最大Key等操作优于HashMap

  2. 快速打印数组

int[] array = {1,2,3,4,5};
System.out.println(Arrays.toString(array));
  1. 求最大值,最小值
Math.max(2, 5);
Math.min(3, 9);
  1. 求数组元素之和
int[] nums = {1, 2, 3, 4, 5};
int sum = IntStream.of(nums).sum();
  1. 判断字符是否为数字或字母
char ch = 'a'
boolean flag = Character.isLetterOrDigit(ch);
  1. 字符串反转
String string="runoob";
String reverse = new StringBuffer(string).reverse().toString();
  1. 求交集
Set record1 = new HashSet();    // {1, 2, 3, 4}
Set record1 = new HashSet();    // {2, 4, 6}
// 求两个集合的交集, 结果为{2, 4}保存在record1中
record1.retainAll(record2);
  1. 当 Map 中不存在指定元素时不返回 null 而返回 默认值
Map map= new HashMap<>();
int count = map.getOrDefault(n, 0);    // 不存在元素n时不返回null, 返回默认值 0 

// 等价于以上操作
if (recored1.containsKey(n)) {
    int count = map.get(n);
} else {
    int count = 0;
}

你可能感兴趣的:(Java编程小知识)