Java开发中遇到的问题

记录一下开发过程中遇到的一些小坑,不是什么大bug,只是找原因浪费了一点时间,或者一些常遇到的问题

Java执行shell命令不起作用

想用java调用bash命令来清空文件,部署上去后,发现并没有执行成功,网上一番搜索找到了正确的打开方式

  • 错误用法

    String cmd = "echo > Error.log"
    Runtime.getRuntime().exec(cmd);
  • 正确用法

    String shellStr = "echo > Error.log"
    String[] cmd = {"sh", "-c", shellStr};
    Runtime.getRuntime().exec(cmd);

Java字符串转日期

  • 格式为EEE MMM dd hh:mm:ss yyyy z的字符串转换成日期
    public static void main(String[] args) throws Exception {
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEE MMM dd hh:mm:ss yyyy z", Locale.US);
            String time = "Thu Jul 16 22:11:11 2020 +0800";
            System.out.println(simpleDateFormat.parse(time));
    }
    // Thu Jul 16 22:11:11 CST 2020

    读取CSV文件

  • 使用hutoolCsvUtil读取同事发来格式为UTF8-bom的文件时第一个字段总是为空
    原因是UTF8-bom文件头存在看不见的字符\uFEFF,所以需要在设置的别名前加上\uFEFF来解决这个问题。
     public static List<TestObj> csvReader(String filePath) {
            CsvReader reader = CsvUtil.getReader();
            //从文件中读取CSV数据
            return reader.read(FileUtil.getUtf8Reader(filePath), TestObj.class);
     }
    
    @Data
    public class TestObj implements Serializable {
        //别名 \uFEFF为utf8-bom文件前缀
        @Alias("\uFEFFchange_id")
        private String changeId;
        @Alias("user")
        private String user;
        @Alias("ci_time")
        private String time;
    }
    
  • 关于\ufeff的一些资料(引自维基百科
    字节顺序标记(英语:byte-order mark,BOM)是位于码点U+FEFF的统一码字符的名称。当以UTF-16或UTF-32来将UCS/统一码字符所组成的字符串编码时,这个字符被用来标示其字节序。它常被用来当做标示文件是以UTF-8、UTF-16或UTF-32编码的标记。

Idea启动报错

idea启动项目时报command line is too long错误

  1. 在文件.idea/workspace.xml中找到<component name="PropertiesComponent">
  2. 在里面加上 <property name="dynamic.classpath" value="true" />
  3. 示例:
    <component name="PropertiesComponent">
        <!--添加这一行-->
        <property name="dynamic.classpath" value="true" />
    </component>