一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第23天,点击查看活动详情。
这一章节校园二手商品交易系统的常见功能。
public void toJson(Object str) throws IOException{
HttpServletResponse response=ServletActionContext.getResponse();
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("text/html;charset=utf-8");
String responseStr = JSON.toJSONString(str,filter,SerializerFeature.WriteNullStringAsEmpty);
Writer writer = response.getWriter();
writer.write(responseStr);
writer.flush();
}
上面的功能主要是将JavaBean序列化为JSON文本,ServletActionContext.getResponse()这里是得到了http的response回应,然后设置缓存,表头,内容格式,接着对json文本以写入的形式,先写入,后刷新。
import java.io.File;
import java.util.ArrayList;
import it.sauronsoftware.jave.Encoder;
import it.sauronsoftware.jave.EncoderException;
import it.sauronsoftware.jave.MultimediaInfo;
/**
* 统计文件夹下视频的总时长
*/
public class TestVedioAllTime {
private static ArrayList<String> filelist = new ArrayList<>();
private static long totalTime;
public static void main(String[] args) {
String path = "I:\\尚硅谷新视频\\尚硅谷2020谷粒商城项目(重新校对版)\\分布式基础篇";// 23.021667小时
// String path="I:\\尚硅谷新视频\\尚硅谷2020谷粒商城项目(重新校对版)\\分布式高级篇";//66.1415小时
// String path="I:\\尚硅谷新视频\\尚硅谷2020谷粒商城项目(重新校对版)\\高可用集群篇";//15.487834小时
getAllFile(path);
String minuteOfVedio = transforMinute(totalTime);
float hourOfVedio = Float.parseFloat(minuteOfVedio) / 60;
System.out.println("文件夹中视频总时长为" + minuteOfVedio + "分钟");
System.out.println("文件夹中视频总时长为" + hourOfVedio + "小时");
}
// 得到所有的文件
public static void getAllFile(String path) {
File root = new File(path);
File[] files = root.listFiles();
for (File file : files) {
// 如果是文件夹,则递归往下走
if (file.isDirectory()) {
getAllFile(file.getAbsolutePath());
filelist.add(file.getAbsolutePath());
} else {
// 截取文件的后缀名
String fileName = file.getName().trim();
String type = fileName.substring(fileName.lastIndexOf("."));
// 常见的后缀名有:avi、mov、rmvb、rm、flv、mp4、3gp等
if (type.equals(".avi") || type.equals(".mov") || type.equals(".rmvb") || type.equals(".rm") ||
type.equals(".flv") || type.equals(".mp4") || type.equals(".3gp")) {
MultimediaInfo multimediaInfo = null;
Encoder encoder = new Encoder();
try {
multimediaInfo = encoder.getInfo(file);
} catch (EncoderException e) {
System.err.println("转换格式有异常:" + e.getMessage());
e.printStackTrace();
}
long duration = multimediaInfo.getDuration();
totalTime += duration;
} else {
System.out.println(fileName + "不是视频文件");
}
}
}
}
// 转换时间
public static String transforMinute(long totalTime) {
String timeString;
if ((totalTime / 60000) < 10) {
timeString = "0" + totalTime / 60000 + "." + ((totalTime / 1000) - ((totalTime / 60000) * 60));
} else if ((totalTime / 60000) < 10 && ((totalTime / 1000) - ((totalTime / 60000) * 60)) < 10) {
timeString = "0" + totalTime / 60000 + "." + "0" + ((totalTime / 1000) - ((totalTime / 60000) * 60));
} else if ((totalTime / 60000) > 9 && ((totalTime / 1000) - ((totalTime / 60000) * 60)) < 10) {
timeString = totalTime / 60000 + "." + "0" + ((totalTime / 1000) - ((totalTime / 60000) * 60));
} else {
timeString = +totalTime / 60000 + "." + ((totalTime / 1000) - ((totalTime / 60000) * 60));
}
return timeString;
}
}
这个功能是统计文件夹下视频的总时长,这是个比较实用的功能。
1、fileList放的是文件的集合。筛选出文件夹下面的所有视频文件,totalTime是总时间。
2、getAllFile(path);得到path路径下的所有视频文件。transforMinute转换时间,对视频里面的时间进行转换,minuteOfVedio 单位是分钟,hourOfVedio 单位是小时。
3、getAllFile以递归的形式,对文件夹的所有文件进行过滤,拿到所有文件名,进行截取文件的后缀名,常见的后缀名有:avi、mov、rmvb、rm、flv、mp4、3gp等,判断这些常见的视频格式就已经可以了,其他比较罕见稀有的视频格式,可以不用判断了,当然你要加的话也是可以的。
4、MultimediaInfo 进行转换格式,如果encoder转换格式有异常,直接抛出异常,给出具体信息。
5、拿到视频信息,叠加视频时长totalTime += duration。
6、如果没有进入判断条件里面,那么就是直接走入最后,给出提示,不是视频文件。
7、transforMinute转换时长,进行时分秒的计算和转换