📄 srtfile.java
字号:
package org.jeasylife.tools.subsync;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
public class SrtFile {
private File file;
private Set<SrtRecord> records = new TreeSet<SrtRecord>();
public SrtFile(File file) {
super();
this.file = file;
}
/**
* @param args
*/
public static void main(String[] args) {
File srtFile = new File("Desperate.Housewives.S02E10.HDTV.XviD-LOL.srt");
SrtFile srt = new SrtFile(srtFile);
srt.checkFile();
srt.backup();
srt.parse();
srt.adjust(-3500);
srt.writeFile();
}
public void writeFile() {
try {
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
for (SrtRecord r : getRecords()) {
bw.write(r.toString());
bw.newLine();
}
bw.flush();
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void adjust(int time) {
for (SrtRecord sr : getRecords()) {
Date d = new Date();
d.setTime(sr.getStartTime().getTime() + time);
sr.setStartTime(d);
Date d1 = new Date();// Date is mutable
d1.setTime(sr.getEndTime().getTime() + time);
sr.setEndTime(d1);
}
}
public void parse() {
int iii = 0;
try {
Date start = new Date();
Date end = new Date();
StringBuilder subtitle = new StringBuilder();
int flag = 0;
boolean subFlag = false;
Scanner sc = new Scanner(file);
while (sc.hasNextLine()) {
String s = sc.nextLine();
if (!"".equals(s)) {
Scanner sl = new Scanner(s);
switch (flag) {
case 0:
if (sl.hasNextInt())
iii = sl.nextInt();
flag = 1;
break;
case 1:
sl.useDelimiter(" --> ");
if (sl.hasNext()) {
start = SrtRecord.parseTime(sl.next());
end = SrtRecord.parseTime(sl.next());
}
flag = 2;
break;
case 2:
if (!subFlag) {
subtitle.append(s);
subFlag = true;
} else {
subtitle.append("\r\n");
subtitle.append(s);
}
break;
default:
System.out.println("assert fail");
}
} else {
// Scanner sline = new Scanner(s);
// while(sline.hasNext()){
// System.out.println(sline.next());
// }
if (sc.hasNextInt()) {
flag = 0;
// System.out.println(start + "" + end);
addRecord(new SrtRecord(iii, start, end, subtitle
.toString()));
subtitle.delete(0, subtitle.length());
subFlag = false;
} else {
flag = 0;
subtitle.append("\r\n");
addRecord(new SrtRecord(iii, start, end, subtitle
.toString()));
subtitle.delete(0, subtitle.length());
subFlag = false;
break;
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
public void backup() {
StringBuilder sb = new StringBuilder(file.getAbsolutePath());
sb.delete(sb.length() - 4, sb.length());
sb.append(".srt.bak");
File backup = new File(sb.toString());
if (!backup.exists()) {
FileUtils.copyFiles(file, backup);
}
}
public void checkFile() {
if (!file.exists()) {
System.out.println("no such file");
System.exit(1);
}
if (!file.isFile()) {
System.out.println("not a file");
System.exit(1);
}
if (!file.getName().toUpperCase().endsWith(".SRT")) {
System.out.println("no a SRT file");
System.exit(1);
}
}
/**
* @return the set
*/
public Set<SrtRecord> getRecords() {
return records;
}
/**
* add SRT record to Set
*
* @param r
* SRT record
*
*/
public void addRecord(SrtRecord r) {
this.records.add(r);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -