0%

图片压缩

添加依赖

1
2
3
4
5
<dependency>
<groupId>com.siashan</groupId>
<artifactId>toolkit-image</artifactId>
<version>1.1.9</version>
</dependency>

使用Thumbnails来进行图片压缩

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

public static void compressImage(String path,
int width, int height,
String suffix,
String outputFilename) {

try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
BufferedImage image = Thumbnails.of(path)
.size(width, height)
.outputFormat(suffix)
.asBufferedImage();
ImageIO.write(image,suffix, new File(outputFilename));

} catch (IOException e) {


}
}

public static void main(String[] args) {
compressImage("/Users/zhanghe/Desktop/线上问题查找.png", 1048, 1000,"png",
"/Users/zhanghe/Desktop/Optimize.png");


}

pdf文件压缩

添加依赖

1
2
3
4
5
<dependency>
<groupId>com.luhuiguo</groupId>
<artifactId>aspose-pdf</artifactId>
<version>23.1</version>
</dependency>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class OptimizePdf {

public static void optimize(String source, String target) {
Document doc = new Document(source);
//设置压缩属性
OptimizationOptions opt = new OptimizationOptions();
//删除PDF不必要的对象
opt.setRemoveUnusedObjects(true);
//链接重复流
opt.setLinkDuplcateStreams(false);
//删除未使用的流
opt.setRemoveUnusedStreams(false);
//删除不必要的字体
opt.setUnembedFonts(true);
//压缩PDF中的图片
opt.getImageCompressionOptions().setCompressImages(true);
//图片压缩比, 0 到100可选,越低压缩比越大
opt.getImageCompressionOptions().setImageQuality(50);
doc.optimizeResources(opt);
//优化web的PDF文档
doc.optimize();
doc.save(target);
}

public static void main(String[] args) {
String source = "/Users/zhanghe/Desktop/2.pdf";
String target = "/Users/zhanghe/Desktop/1.pdf";
optimize(source, target);
}
}

EasyExcel写入多Sheet页

接到一个需求是按照城市分组将同一城市的数据写入到一个Sheet页中

1
2
3
4
5
6
7
8
9
10
11
ExcelWriter excelWriter = EasyExcel.write("/Users/zhanghe/Desktop/user/temp/all.xls", AllocationExcel.class)
.build();
int sheetNo = 0;
for(long locationId : locationIdList){
WriteSheet sheet = EasyExcel.writerSheet(sheetNo, locationName).build();
sheetNo++;
// 填充数据
excelWriter.write(allocationExcelList,sheet);
}
// 一定要所有的sheet页都写完在finish,finish代表整个Excel写数据完成
excelWriter.finish();

用户只能单设备登录

有时候在同一个系统中,只允许一个用户在一个设备登录。

之前的登陆者被顶掉

将最大会话数设置为1就可以保证用户只能同时在一个设备上登录

1
2
3
4
5
6
7
8
9
10
11
@Override
protected void configure(HttpSecurity http) throws Exception {
http.
.anyRequest().authenticated() // 其他需要认证
.and()
.csrf().disable() // 关闭csrf跨站请求伪造防护
// 设置一个用户只能在一个设备上登录 设置最大会话数
.sessionManagement().maximumSessions(1)
;

}
阅读全文 »

scala文件操作

scala的文件操作相关类是在scala.io包下

读取行

可以使用getLines方法来读取文件中的所有行

1
2
3
4
5
6
7
8
9
10
val source: BufferedSource = Source.fromFile("TestImplicit.scala", "UTF-8")
// 读取行
val value: Iterator[String] = source.getLines()
// 输出每行
for (line <- value) {
println(line)
}

// 也可以直接输出整个文件内容
println(source.mkString)

执行shell命令

scala执行shell命令非常简单

1
2
3
4
5
6
7
8
// shell命令执行
// process包中包含了一个从字符串到ProcessBuilder对象的隐式转换
// !操作的就是ProcessBuilder对象,返回的结果是执行程序的返回值
import sys.process._
"ls -al /scala_study/src"!
// 如果使用!!,会以字符串的形式返回
val str = "ls -al /Users/zhanghe/Desktop/user/myself/GitProject/scala_study/src" !!;
println(str)

还支持管道符

1
2
// 还支持管道来将结果传递到另一个程序  #|就是管道符
"ls -al /Users/zhanghe/Desktop/user/myself/GitProject/scala_study/src" #| "grep main" !

支持重定向

1
2
3
4
5
6
7
8
9
10
import java.io.File

// #> 输出重定向到文件
"ls -al /Users/zhanghe/Desktop/user/myself/GitProject/scala_study/src" #> new File("output.txt")!

// #>> 输出重定向到文件,追加
"ls -al /Users/zhanghe/Desktop/user/myself/GitProject/scala_study/src" #>> new File("output.txt")!

// #< 从文件输出
"grep main" #< new File("output.txt")!

发现就是在shell的基础上加了个#

如 管道符|变成了#|,重定向>变成了#>