File f = new File("");
try {
String dir= f.getCanonicalPath();
System.out.println("当前文件路径:"+dir);
} catch (IOException e) {
log.error("获取文件路径失败:{}", e.getMessage());
throw new RuntimeException(e);
}
easyExcel追加方式写入文件
private static void writeAppend(String path, String sheetName, ListJava中通过文件路径分隔符分割文件路径list) { File file = new File(path + File.separator + FILENAME.split("\.")[0] + "_result.xlsx"); File tempFile = new File(path + File.separator + UUID.randomUUID().toString().replace("-", "") + ".xlsx"); if (file.exists()) { // 第二次按照原有格式,不需要表头,追加写入 EasyExcel.write(file, RuleData.class).needHead(false). withTemplate(file).file(tempFile).sheet(sheetName).doWrite(list); } else { // 第一次写入需要表头 EasyExcel.write(file, RuleData.class).sheet(sheetName).doWrite(list); } if (tempFile.exists()) { file.delete(); tempFile.renameTo(file); } log.info("写入{}成功!", file.getAbsolutePath()); }
在java中,一般为了避免windows系统和linux系统之间路径分隔符的差异,我们会使用File.separator来代替windows下的“”或者Linux下的“/”,来表示文件路径。
如果需要分割路径来获取文件(夹)名,可以使用String.split(String regex)方法,如果只用一个File.separator作为参数会抛异常。
String separator = File.separator;
String path = "E:\Program Files (x86)\IdeaProjects\leetcode\src\test\1.txt";
for(String str : Arrays.asList(path.split(separator))){
System.out.println(str);
}
异常如下:
这是因为在Windows下,File.separator是“”,经过转义识别为“”,而String.split方法的参数应该要传入的是一个正则表达式字符串,传入“”就会抛这个异常。因为在java中一个“”代表的是转义字符。
这个时候如果还是要进行分割需要再加上一个反斜杠,并且需要对这个反斜杠加一个转义字符“”。即代码中“”代表一个反斜杠“”。
如果这样写的话双引号中的 会报错,因为idea预编译会报错:Illegal/unsupported escape sequence,即非法/不支持的转义序列错误,但是不影响程序运行。
我们还可以换种方式写:传入两个File.separator拼接起来作为参数,这样就不会预编译报错。
运行结果是一样的:
然而在Linux系统下,路径分隔符是“/”,分割的时候不需要转义,也就不需要加反斜杠,刚才那种写法就没办法在Linux系统中运行起来了。为了能够兼容Windows和Linux环境,可以使用正则表达式“/|\”来完成。
/|\\
结果:
使用Collectors.groupingBy()。
例如:
Mapjava正则获取中文字符> ruleDateGroup = ruleDataList.stream().collect(Collectors.groupingBy(RuleData::getName));
public static String getStrChinese(String str) {
String regEx = "[^\u4e00-\u9fa5]";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
return m.replaceAll("").trim();
}



