昨天想看部奥斯卡老片,结果发现居然没有中文版。 为了更方便理解电影内容,下载了罗马尼亚语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. git 换行问题_后端必备的 Git 分支开发规范指南
  2. 一般认为计算机发展历史经历,2018年职称计算机考试考前冲刺练习及答案(1)...
  3. @PropertySource@ImportResource@Bean
  4. DevExpress的分页Tab控件XtraTabControl控件的使用
  5. Ubuntu MTK/RK/AW 编译服务器
  6. Windows下安装并设置Redis
  7. 浅谈Java锁,与JUC的常用类,集合安全类,常用辅助类,读写锁,阻塞队列,线程池,ForkJoin,volatile,单例模式不安全,CAS,各种锁
  8. alibaba Fastjson的JOSN解析库 -
  9. 每日站立会议个人博客(冲刺周)-Wednesday
  10. php用两个栈来实现队列
  11. 大数据_Flink_数据处理_资源的分配和并行度测试---Flink工作笔记0013
  12. Vagrant (一) - 基本知识
  13. JavaScript的语法规则
  14. python常用模块②
  15. Node.js 0.8.20 稳定版发布
  16. java debug怎么用_debug怎么用
  17. 企业级即时通讯通信平台的实现
  18. oracle 动态声明变量_Oracle11g新特性之动态变量窥视
  19. 某程序员吐槽:刚过试用期就被辞退,理由竟是不转发朋友圈!
  20. python大数据读取分析_python 大数据读取

热门文章

  1. 加权最小二乘(Weighted Least Squares,WLS)回归及R语言计算
  2. 微信收款音响f1服务器断开,微信收款音箱f1f2f3的区别?
  3. Linux 上最好的9款视频编辑器
  4. 计算机语言发展浅层笔记
  5. CISAW安全集成考试有了新变化
  6. axure 原型设计20条军规
  7. 手把手教你写!java开发的工作描述
  8. python 中文转unicode编码_python实现unicode转中文及转换默认编码的方法
  9. 【Multisim仿真】焦耳小偷电路仿真实验
  10. 云服务器仿真,仿真云平台