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