业务场景
最近在写关于项目中创建文件夹的代码,每次添加数据时就创建文件夹。看看代码。
public void createBillsImage() {
Properties props=System.getProperties();
String os =props.getProperty("os.name");
String realPath;
if(os.startsWith("Win") || os.startsWith("win") || os.startsWith("WIN")) {
// 读取json文件
File file1 = new File(System.getProperty("user.dir"));
String str = file1.toString();
String removeProjectName = str.substring(0,str.lastIndexOf("\\"));
realPath = removeProjectName + "\\" + "qrcodeImage";
File file = new File(realPath);
if(!file.exists()) {
file.mkdirs();
}
QrCodeUtil.generate(baseUrl + areaUrl + "?id=" + id, 300, 300,
FileUtil.file(realPath + "\\" + "aa"+ ".jpg"));
}else {
String path = System.getProperty("user.dir");
// 读取json文件
File file1 = new File(System.getProperty("user.dir"));
String str = file1.toString();
String removeProjectName = str.substring(0,str.lastIndexOf("/"));
realPath = removeProjectName + "/" + "qrcodeImage";
File file = new File(realPath);
if(!file.exists()) {
file.mkdirs();
}
QrCodeUtil.generate(baseUrl + areaUrl + "?id=" + id, 300, 300,
FileUtil.file(path + "/" + "aa" + ".jpg"));
}
}
@Transactional(rollbackFor = Exception.class)
public void add(String head, String details) {
AddInStorageHeadDTO headDTO = BeanUtil.fillBeanWithMap(JSON.parseObject(head),
new AddInStorageHeadDTO(), false);
Long id = new Sequence().nextId();
// 创建这批物资的二维码
ThreadUtil.execute(() -> this.createBillsImage());
// ..........
这个代码的缺点是,每次创建都在检查新建文件夹,于是考虑使用 static 优化。虽然使用了异步代码,但是还是觉得上面的代码在浪费我的内存。于是对于强迫症的我产生了以下代码。
static {
Properties props=System.getProperties();
String os =props.getProperty("os.name");
String realPath;
if(os.startsWith("Win") || os.startsWith("win") || os.startsWith("WIN")) {
// 读取json文件
File file1 = new File(System.getProperty("user.dir"));
String str = file1.toString();
String removeProjectName = str.substring(0,str.lastIndexOf("\\"));
realPath = removeProjectName + "\\" + "qrcodeImage";
File file = new File(realPath);
if(!file.exists()) {
file.mkdirs();
}
QrCodeUtil.generate(baseUrl + areaUrl + "?id=" + id, 300, 300,
FileUtil.file(realPath + "\\" + "aa"+ ".jpg"));
}else {
String path = System.getProperty("user.dir");
// 读取json文件
File file1 = new File(System.getProperty("user.dir"));
String str = file1.toString();
String removeProjectName = str.substring(0,str.lastIndexOf("/"));
realPath = removeProjectName + "/" + "qrcodeImage";
File file = new File(realPath);
if(!file.exists()) {
file.mkdirs();
}
QrCodeUtil.generate(baseUrl + areaUrl + "?id=" + id, 300, 300,
FileUtil.file(path + "/" + "aa" + ".jpg"));
}
}
使用 static 静态代码块代替方法。因为此 static 代码块在类加载的时候执行,并且执行一次。完美。