昨天想看部奥斯卡老片,结果发现居然没有中文版。 为了更方便理解电影内容,下载了罗马尼亚语srt字幕。

但是,碍于水平有限,只能用谷歌翻译快速翻译完。在压制视频时,却发现时间戳由于谷歌翻译的影响。变得不可用。

原始srt时间戳

翻译成中文时间戳

于是,只能把原始srt的时间戳复制到新翻译文件中。但是字幕对话多达几千条,一条条复制真的太

费时间。由于之前做过一段时间程序员,让我想起了Java文件批量操作。好了,步入正题,直接上代码。

package test;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;public class fileReplace {/** 读取文件前判断文件编码* * @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);sourceFileIn.read(sourceFileContext);String sourceFileCode = fileJudgingCode(sourceFile); // 判断文件编码格式String sourceFileStr = new String(sourceFileContext, sourceFileCode);String[] sourceFileContent = sourceFileStr.split("(\r\n|\r|\n|\n\r)");//根据换行符分割字符串//替换文件操作in = new FileInputStream(_file);in.read(fileContext);String _fileCode = fileJudgingCode(_file); // 判断文件编码格式String str = new String(fileContext, _fileCode);String[] content = str.split("(\r\n|\r|\n|\n\r)");//根据换行符分割字符串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项目空间里,链接在下方

https://github.com/JackLiDi/Java-

由于要换时间戳,所以只需要通过代码将旧srt中的罗马尼亚语,逐行替换为中文即可。

运行程序注意需要将两个字幕文件放到同一文件夹下,我的是放在D盘test文件夹下,

路径图

如果你不是在这个路径下,需要修改代码中对应的路径

代码中的路径

由于是Java程序,需要安装Java虚拟机,如有需要可以在以下链接下载(Java虚拟机,代码文件都在里面)

链接:https://pan.baidu.com/s/1KOyavFDUSOo_BvYF2ZZH1A 
  提取码:eg9u

java虚拟机下载后只需要打开,一直点确定就能完成安装。

安装完成虚拟机后,就可以运行Java文件了。

如何在命令行运行Java文件可以自行百度一下。

虽然谷歌翻译效果差强人意,但是理解电影的意思还是足够了。而且效率高,几千条字幕几分钟翻译完毕。然后用以上代码更换时间戳,然后等压制完成,就可以完成一部老电影的字幕翻译工作。

然后就可以美滋滋的欣赏老电影了,再也不用因为有限的外语水平影响观影的体验了

Java 文件操作 逐行替换文件内容,加快翻译效率相关推荐

  1. 读取Java文件到byte数组的三种方式及Java文件操作大全(包括文件加密,String加密)

    读取Java文件到byte数组的三种方式 package zs;import java.io.BufferedInputStream; import java.io.ByteArrayOutputSt ...

  2. java文件操作和_JAVA文件操作类和文件夹的操作

    JAVA文件操作类和文件夹的操作 package com.gamvan.tools; import java.io.BufferedReader; import java.io.File; impor ...

  3. java逐行读取文件_Java逐行读取文件

    java逐行读取文件 Today we will look into different java read file line by line methods. Sometimes we have ...

  4. Java编程那些事儿——文件操作之写文件

    Java编程那些事儿--文件操作之写文件 Java, Java培训, Java基础, Java学习, Java教程 11.3.1.4 写文件 如前所述,将程序内部的数据输出到程序外部的数据源,应该使用 ...

  5. C文件操作、读写文件 C++文件读写、文件操作

    转自  飘羽随风 基于C的文件操作  在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别介绍之. 一.流式文件操作 这种方式的文件操作有一个重要的结构FILE,FI ...

  6. php文件写入生成文件,PHP 文件操作类(创建文件并写入) 生成日志

    欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 PHP 文件操作类(创建文件并写入) 生成日志 /** * 文件操作(生成日志)支持多条插入 * (如果插入多条语句并换行 ...

  7. [Python从零到壹] 三.语法基础之文件操作、CSV文件读写及面向对象

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  8. php操作外部文件,php文件操作-将其他文件的数据添加到本文件中

    本篇文章的内容是php文件操作-将其他文件的数据添加到本文件中,现在分享给大家,有需要的朋友可以参考一下 GitHub源码 其实我们的程序基于下面的问题写的答案: 有两个文本文件 A.txt B.tx ...

  9. php点击按钮创建文件,PHP 文件操作类(创建文件并写入) 生成日_php

    path = $path; } //判断操作方式 a追加写 if (! empty ( $mode )) { $this->mode = $mode; } //判断写入的内容 if (! emp ...

最新文章

  1. 【剑指offer】树的子结构
  2. selenium+python headless 爬虫环境配置
  3. 配置redis禁用几个危险命令
  4. java_IO流之SequenceInputStream合并流的使用
  5. go build命令详解
  6. 自定义Interpolator
  7. 王峰:Hadoop生态技术在阿里全网商品搜索实战
  8. Complex Congratulation β
  9. Oracle 中文分词CHINESE_VGRAM_LEXER与CHINESE_LEXER比较
  10. 集成ffmpeg/x264:ERROR: libx264 not found的问题
  11. 【HDU - 6514】Monitor(二维差分,前缀和)
  12. C# 获取动态类中所有的字段
  13. 正则表达式 数字和小数点_《自然语言处理综论》第三版笔记(二)之正则表达式,文本标准化和编辑距离...
  14. 苹果ipa签名解锁_朋友,iOS签名请了解一下
  15. 毫米波雷达信号处理系统
  16. Cirium称,2020年航空公司准点率表现良好,但客运航班数只有2019年的一半
  17. python excel数据分析师职业技能_数据分析师=Excel+Python?其实不止!
  18. 【编译原理】语言认知之Java、Python、C++快速排序三者运行效率与开发效率比较
  19. C++ 二元一次不定方程巧妙求解——运用扩展欧几里得算法
  20. Unity 2D血条制作方式

热门文章

  1. PostgreSQL 级联删除
  2. 未能加载文件或程序集“”或它的某一个依赖项。应用程序无法启动,因为应用程序的并行配置不正确。有关详细信息,请参阅应用程序事件日志,或使用命令行 sxstrace.
  3. css l数字相加,CSS calc()的完整指南
  4. Pytorch实现FCN图像语义分割网络
  5. 思科路由模拟器 -- (1)路由配置
  6. 多路归并问题(多个有序表合为一个有序表)
  7. anubis质检结果xtr文件详解
  8. 回溯法解旅行商问题java,回溯法解旅行商问题 | 学步园
  9. Idea导出可运行jar包及运行方法
  10. 基于Vue所制作的发牌游戏(附全部代码)