Java日常

-
-
2025-07-27 20:59

list通过Stream排序时,默认是从小到大,若需由大到小需要reversed

List<ApiRank> res = list.stream().sorted(Comparator.comparing(ApiRank::getCount).reversed()).collect(Collectors.toList());

Paths类

String url = "https://pdf-container.oss-cn-beijing.aliyuncs.com/2024/07/28/flink.pdf";

String fileName = Paths.get(url).getFileName().toString();

上述代码在Unix-Like系统中可以正常执行,并输出flink.pdf,而在Windows中却会报错,报错信息为index=5<:>非法的字符。这是因为Paths类会根据系统环境,自动选择文件路径分隔符,Windows的路径分隔符为\\,而Unix-Like系统是/,因此在Windows中,Paths类无法正确分隔URL,导致提示:为非法字符。

该代码设计是不严谨的,不仅仅是跨系统的问题,更是因为Paths类是不能解析Url的,Paths类应当解析的是文件资源路径,而非一个url。

String fileName = new URL(url).getPath();

fileName = fileName.substring(fileName.lastIndexOf('/') + 1);

用这个方法会更合适。

Mybatis

在xml文件中,--或/**/注释的sql里不能有#{},否则mybatis会注入参数,导致错误。
可用<!-- -->进行注释,使用这种注释方式有如下好处

  • 绝对可靠
  • 跨不同库,不需要区分是什么类型的数据库
  • 注释内容不会在sql中出现 (Debug打印的日志)

Jar

我们经常会遇到要修改jar包中文件的场景,例如修改某个配置文件,若只是如此小的改动就重新打jar包,重新上传,未免就太浪费时间了。

解决方案1

通过vim来解决。

  1. vim restless-doppler-1.0-SNAPSHOT-jar-with-dependencies.jar 
  2. 通过vim的搜索或手动找到要修改的文件,光标选中后按回车

  3. 进入配置文件,按i修改,修改后输入:wq进行保存
  4. 文件修改保存后,会退出到jar包里。此时若输入:wq,可能会出现报错:

     

    E382: Cannot write, 'buftype' option is set 

不过无需担心,修改的内容我们已经保存了,只要在这里输入:q退出就可以生效了。

出现这个问题的原因:

Vim 发现你打开的是一个 .jar 文件,它会识别出这是一个特殊的“缓冲类型 (buftype)”。对于 JAR 文件,Vim 通常会将其 'buftype' 属性设置为:

  • nowrite: 表示这个缓冲区是不可写入的。
  • nofile: 表示这个缓冲区不对应硬盘上的一个实际文件(或者说,它是一个虚拟的视图,而不是原始文件的直接映射)。

简单来说,Vim 把 JAR 文件当作一个压缩包(类似 ZIP 文件),而不是一个普通文本文件。你不能直接用文本编辑器去“修改”一个压缩包的内部结构,因为那样会破坏它的完整性。Vim 这样做是出于保护文件完整性的考虑。

解决方案2

对比方案1,方案2无疑是操作更多更复杂的,但是方案2是最安全保守的。

我们需要 解压 -→ 编辑文件 -→ 打包 这三步。

解压:

可以通过jar或者unzip来解压:

  1. 使用jar命令

     

    jar xvf YourApplication.jar

     

    这条命令会把jar包的内容全部解压到当前目录下

     

  2. 使用unzip命令

     

    unzip YourApplication.jar -d extracted

     

    这条命令会把jar包的内容全部解压到extracted下

 

修改文件:

找到文件,进行修改

 

打包:

jar cvf YourNewApplication.jar -C extracted/ .