Java⽂件操作逐⾏替换⽂件内容,加快翻译效率昨天想看部奥斯卡⽼⽚,结果发现居然没有中⽂版。 为了更⽅便理解电影内容,下载了罗马尼亚语srt字幕。
但是,碍于⽔平有限,只能⽤⾕歌翻译快速翻译完。在压制视频时,却发现时间戳由于⾕歌翻译的影响。变得不可⽤。
原始srt时间戳
翻译成中⽂时间戳
于是,只能把原始srt的时间戳复制到新翻译⽂件中。但是字幕对话多达⼏千条,⼀条条复制真的太
费时间。由于之前做过⼀段时间程序员,让我想起了Java⽂件批量操作。好了,步⼊正题,直接上代码。
package test;
import java.io.File;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;
public class fileReplace {
java replace方法/*
* 读取⽂件前判断⽂件编码
*
* @param newFile 需要判断的⽂件
*
* @return ⽂件编码格式
*
* @date 2021-1-31
*/
static String fileJudgingCode(File newFile) {
EncodingDetect s = new EncodingDetect();
return EncodingDetect.javaname[s.detectEncoding(newFile)];
}
/*
* 逐⾏替换两个⽂件中的内容
*
* @param sourceFilePath 源⽂件路径 iniPath 替换⽂件路径
*
* @return 布尔类型 true:处理成功 false:处理失败
*
* @date 2021-1-31
*/
static boolean fileReplacementOperation(String sourceFilePath,String iniPath) {
File sourceFile = new File(sourceFilePath);//源⽂件路径
File _file = new File(iniPath);//替换⽂件路径
byte[] sourceFileContext = new byte[(int) sourceFile.length()];
byte[] fileContext = new byte[(int) _file.length()];
FileInputStream in = null;
FileInputStream sourceFileIn = null;
PrintWriter out = null;
try {
//源⽂件读取操作
sourceFileIn = new FileInputStream(sourceFile);
String sourceFileCode = fileJudgingCode(sourceFile); // 判断⽂件编码格式
String sourceFileStr = new String(sourceFileContext, sourceFileCode);
String[] sourceFileContent = sourceFileStr.split("(\r\n|\r|\n|\n\r)");//根据换⾏符分割字符串
//替换⽂件操作
in = new FileInputStream(_file);
String _fileCode = fileJudgingCode(_file); // 判断⽂件编码格式
String str = new String(fileContext, _fileCode);
String[] content = str.split("(\r\n|\r|\n|\n\r)");//根据换⾏符分割字符串
String newStr = new String();
String newStr = new String();
for(int i=0;i<content.length;i++) {
if(!content[i].equals("")) {
boolean str2 = content[i].matches(".*[a-zA-z].*");//判断每⾏是否包含字母 if (str2){//检查字符串是否包含字母
content[i] = content[i].replace(content[i], sourceFileContent[i]);
}
newStr += content[i]+"\r\n";
// Thread.sleep(100);
System.out.println(i);
}else {
newStr += content[i]+"\r\n";
continue;
}
}
out = new PrintWriter(_file,"utf-8");
out.write(newStr);
return true;
} catch (IOException e ) {
return false;
} finally{
try {
out.flush();
out.close();
in.close();
sourceFileIn.close();
} catch (IOException e) {
return false;
}
}
}
public static void main(String[] args) {
try {
String sourceFilePath = "D:/test/chi.srt";//源⽂件路径
String iniPath = "D:/test/eng.srt";//操作⽂件路径
boolean resultMsg = fileReplacementOperation(sourceFilePath,iniPath);
if(resultMsg == true) {
System.out.println("替换成功");
}else {
System.out.println("替换失败");
}
}catch(Exception e) {
System.out.println("执⾏⽂件出错");
e.printStackTrace();
}
}
}
EncodingDetect 类中的代码因为太⼤了,我放在github项⽬空间⾥,链接在下⽅
由于要换时间戳,所以只需要通过代码将旧srt中的罗马尼亚语,逐⾏替换为中⽂即可。 运⾏程序注意需要将两个字幕⽂件放到同⼀⽂件夹下,我的是放在D盘test⽂件夹下,
路径图
如果你不是在这个路径下,需要修改代码中对应的路径
代码中的路径
由于是Java程序,需要安装Java虚拟机,如有需要可以在以下链接下载(Java虚拟机,代码⽂件都在⾥⾯)
java虚拟机下载后只需要打开,⼀直点确定就能完成安装。
安装完成虚拟机后,就可以运⾏Java⽂件了。
如何在命令⾏运⾏Java⽂件可以⾃⾏百度⼀下。
虽然⾕歌翻译效果差强⼈意,但是理解电影的意思还是⾜够了。⽽且效率⾼,⼏千条字幕⼏分钟翻译完毕。然后⽤以上代码更换时间戳,然后等压制完成,就可以完成⼀部⽼电影的字幕翻译⼯作。
然后就可以美滋滋的欣赏⽼电影了,再也不⽤因为有限的外语⽔平影响观影的体验了
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论