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文件
- 使用hutool的
CsvUtil
读取同事发来格式为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
错误
- 在文件
.idea/workspace.xml
中找到<component name="PropertiesComponent">
- 在里面加上
<property name="dynamic.classpath" value="true" />
- 示例:
<component name="PropertiesComponent"> <!--添加这一行--> <property name="dynamic.classpath" value="true" /> </component>