Java 文件操作 逐行替换文件内容,加快翻译效率
昨天想看部奥斯卡老片,结果发现居然没有中文版。 为了更方便理解电影内容,下载了罗马尼亚语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 文件操作 逐行替换文件内容,加快翻译效率相关推荐
- 读取Java文件到byte数组的三种方式及Java文件操作大全(包括文件加密,String加密)
读取Java文件到byte数组的三种方式 package zs;import java.io.BufferedInputStream; import java.io.ByteArrayOutputSt ...
- java文件操作和_JAVA文件操作类和文件夹的操作
JAVA文件操作类和文件夹的操作 package com.gamvan.tools; import java.io.BufferedReader; import java.io.File; impor ...
- java逐行读取文件_Java逐行读取文件
java逐行读取文件 Today we will look into different java read file line by line methods. Sometimes we have ...
- Java编程那些事儿——文件操作之写文件
Java编程那些事儿--文件操作之写文件 Java, Java培训, Java基础, Java学习, Java教程 11.3.1.4 写文件 如前所述,将程序内部的数据输出到程序外部的数据源,应该使用 ...
- C文件操作、读写文件 C++文件读写、文件操作
转自 飘羽随风 基于C的文件操作 在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别介绍之. 一.流式文件操作 这种方式的文件操作有一个重要的结构FILE,FI ...
- php文件写入生成文件,PHP 文件操作类(创建文件并写入) 生成日志
欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 PHP 文件操作类(创建文件并写入) 生成日志 /** * 文件操作(生成日志)支持多条插入 * (如果插入多条语句并换行 ...
- [Python从零到壹] 三.语法基础之文件操作、CSV文件读写及面向对象
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
- php操作外部文件,php文件操作-将其他文件的数据添加到本文件中
本篇文章的内容是php文件操作-将其他文件的数据添加到本文件中,现在分享给大家,有需要的朋友可以参考一下 GitHub源码 其实我们的程序基于下面的问题写的答案: 有两个文本文件 A.txt B.tx ...
- php点击按钮创建文件,PHP 文件操作类(创建文件并写入) 生成日_php
path = $path; } //判断操作方式 a追加写 if (! empty ( $mode )) { $this->mode = $mode; } //判断写入的内容 if (! emp ...
最新文章
- 【剑指offer】树的子结构
- selenium+python headless 爬虫环境配置
- 配置redis禁用几个危险命令
- java_IO流之SequenceInputStream合并流的使用
- go build命令详解
- 自定义Interpolator
- 王峰:Hadoop生态技术在阿里全网商品搜索实战
- Complex Congratulation β
- Oracle 中文分词CHINESE_VGRAM_LEXER与CHINESE_LEXER比较
- 集成ffmpeg/x264:ERROR: libx264 not found的问题
- 【HDU - 6514】Monitor(二维差分,前缀和)
- C# 获取动态类中所有的字段
- 正则表达式 数字和小数点_《自然语言处理综论》第三版笔记(二)之正则表达式,文本标准化和编辑距离...
- 苹果ipa签名解锁_朋友,iOS签名请了解一下
- 毫米波雷达信号处理系统
- Cirium称,2020年航空公司准点率表现良好,但客运航班数只有2019年的一半
- python excel数据分析师职业技能_数据分析师=Excel+Python?其实不止!
- 【编译原理】语言认知之Java、Python、C++快速排序三者运行效率与开发效率比较
- C++ 二元一次不定方程巧妙求解——运用扩展欧几里得算法
- Unity 2D血条制作方式
热门文章
- PostgreSQL 级联删除
- 未能加载文件或程序集“”或它的某一个依赖项。应用程序无法启动,因为应用程序的并行配置不正确。有关详细信息,请参阅应用程序事件日志,或使用命令行 sxstrace.
- css l数字相加,CSS calc()的完整指南
- Pytorch实现FCN图像语义分割网络
- 思科路由模拟器 -- (1)路由配置
- 多路归并问题(多个有序表合为一个有序表)
- anubis质检结果xtr文件详解
- 回溯法解旅行商问题java,回溯法解旅行商问题 | 学步园
- Idea导出可运行jar包及运行方法
- 基于Vue所制作的发牌游戏(附全部代码)