因为字幕组的原因开始接触vtt(YouTube的自动轴)

但是那货太过于反人类,断句很迷,基本没法用。

所以我就打算写一个Java程序来提取其中的文本(然后发现原来已经有大佬做了)

那么既然都写了,就发出来吧~

写了三个类,大家稍微看一下吧。

package com.oilman.vtttotxt;public class Main {public static void main(String[] args) {MainWindow mainWindow = new MainWindow();mainWindow.showUI();}
}
package com.oilman.vtttotxt;import javax.swing.*;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.List;public class MainWindow {static String inputFilePath, outputFilePath;public void showUI() {//窗体类javax.swing.JFrame window = new javax.swing.JFrame();//标题window.setTitle("VTT转换");//窗体大小(具体值跟电脑显示器的像素有关,可调整到合适大小)window.setSize(400, 500);//设置退出进程的方法window.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);window.setLocationRelativeTo(null);//流式布局管理器java.awt.FlowLayout flow = new java.awt.FlowLayout();window.setLayout(flow);  //给窗体设置为流式布局——从左到右然后从上到下排列自己写的组件顺序//自定义文本框大小java.awt.Dimension sizeForTexts = new java.awt.Dimension(280, 30);//输入文件位置文本框JTextField inputTextField = new JTextField();inputTextField.setSize(200, 100);inputTextField.setPreferredSize(sizeForTexts);//window.add(inputTextField);//后面的文本JLabel inputDescription = new JLabel();inputDescription.setText("输入地址");window.add(inputDescription);//输出文件文本框JTextField outputTextField = new JTextField();outputTextField.setSize(200, 100);outputTextField.setPreferredSize(sizeForTexts);outputTextField.setText("请将文件拖入上面输入框");window.add(outputTextField);//后面的文本JLabel outputDescription = new JLabel();outputDescription.setText("输出地址");window.add(outputDescription);//拖拽文件识别inputTextField.setTransferHandler(new TransferHandler() {private static final long serialVersionUID = 1L;@Overridepublic boolean importData(JComponent comp, Transferable t) {try {Object o = t.getTransferData(DataFlavor.javaFileListFlavor);inputFilePath = o.toString();if (inputFilePath.startsWith("[")) {inputFilePath = inputFilePath.substring(1);}if (inputFilePath.endsWith("]")) {inputFilePath = inputFilePath.substring(0, inputFilePath.length() - 1);}//操作识别到的地址if (inputFilePath.toLowerCase().endsWith(".vtt")) {outputFilePath = inputFilePath.substring(0, inputFilePath.length() - 4) + ".txt";outputTextField.setText(outputFilePath);}System.out.println(inputFilePath);inputTextField.setText(inputFilePath);return true;} catch (Exception e) {e.printStackTrace();}return false;}@Overridepublic boolean canImport(JComponent comp, DataFlavor[] flavors) {for (DataFlavor flavor : flavors) {if (DataFlavor.javaFileListFlavor.equals(flavor)) {return true;}}return false;}});//按钮javax.swing.JButton button = new javax.swing.JButton("转换");button.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {if (!inputFilePath.isEmpty() && !outputFilePath.isEmpty()) {Utils utils = new Utils();String txtString;List<String> vttList;try {vttList = utils.fileReader(inputFilePath);txtString = utils.getTxt(vttList);utils.fileWriter(txtString, outputFilePath);} catch (IOException ex) {ex.printStackTrace();}}}});window.add(button);//设置可见window.setVisible(true);}
}
package com.oilman.vtttotxt;import java.io.*;
import java.util.ArrayList;
import java.util.List;public class Utils {public String getTxt(List<String> vtt) {StringBuilder txtString = new StringBuilder();List<String> contentList = new ArrayList<String>();for (int i = 0; i < vtt.size(); i++) {if (vtt.get(i).contains("align:start position:0%") &&vtt.get(i).contains("-->") &&!vtt.get(i + 1).isEmpty()) {contentList.add(vtt.get(i + 1));}}for (int i = 0; i < contentList.size(); i++) {if (i < contentList.size() - 1 && contentList.get(i).equals(contentList.get(i + 1)) &&!contentList.get(i).equals(" ") && !contentList.get(i).isEmpty()) {txtString.append(" \n").append(contentList.get(i));}}return txtString.toString();}public void fileWriter(String content, String path) throws IOException {File file = new File(path);FileOutputStream fileOutputStream = new FileOutputStream(file);fileOutputStream.write(content.getBytes());fileOutputStream.close();}public List<String> fileReader(String path) throws IOException {List<String> output = new ArrayList<String>();FileInputStream fileInputStream = new FileInputStream(path);BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream));String tempString = null;while ((tempString = bufferedReader.readLine()) != null) {output.add(tempString);}fileInputStream.close();return output;}
}

基于Java的vtt转txt程序相关推荐

  1. 基于java SSM框架+微信小程序实现电子书城阅读器演示【附项目源码+论文说明】分享

    基于java SSM框架+微信小程序实现电子书城阅读器演示 摘要 而随着互联网技术的不断发展,互联网已经渗入到我们生活中的各个方面.移动设备的普及使我们的生活发生了翻天覆地的变化,这种变化也深刻影响着 ...

  2. 基于java SSM框架+微信小程序实现电子书城阅读器演示【附项目源码+论文说明】

    基于java SSM框架+微信小程序实现电子书城阅读器演示 摘要 而随着互联网技术的不断发展,互联网已经渗入到我们生活中的各个方面.移动设备的普及使我们的生活发生了翻天覆地的变化,这种变化也深刻影响着 ...

  3. 计算机毕业设计ssm基于Java的家校沟通程序

    最新计算机专业原创毕业设计参考选题都有源码+数据库是近期作品 你的选题刚好在下面有,有时间看到机会给您发 [1] jsp老年人健康饮食管理系统 [2] ssm智创员工管理系统 [3] JSP社团管理系 ...

  4. java聊天程序论文_【基于java的仿qq聊天程序的设计与实现论文最终版材料】

    基于java的仿qq聊天程序的设计与实现(论文)(最终版) <基于java的仿qq聊天程序的设计与实现(论文).doc>由会员分享,可免费在线阅读全文,更多与<基于java的仿qq聊 ...

  5. 基于JAVA学习自律养成小程序前台.mp4计算机毕业设计源码+系统+数据库+lw文档+部署

    基于JAVA学习自律养成小程序前台.mp4计算机毕业设计源码+系统+数据库+lw文档+部署 基于JAVA学习自律养成小程序前台.mp4计算机毕业设计源码+系统+数据库+lw文档+部署 本源码技术栈: ...

  6. 基于Java的在线网盘程序—ZFile(推荐开源项目)

    文章目录 一.介绍ZFile项目 二.快速使用 windows部署 下载安装jar包与启动服务 三.实战(添加资源并查看.下载) 前置配置:系统初始化(注册用户名.密码,站点名称) 前置配置:基本配置 ...

  7. 基于Java后台(Springboot框架)+小程序(MINA框架)+Mysql数据库的小程序商城系统设计与实现

    项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于微信小程序商城系统,前台用户使用小程序,小程序使用微信开发者工具开发:后台管理使用基JAVA+MySql的C/S架构,开发工具使用IDEA: ...

  8. [附源码]Python计算机毕业设计SSM基于java学科竞赛管理系统(程序+LW)

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  9. [附源码]Python计算机毕业设计SSM基于Java网上玩具商店(程序+LW)

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

最新文章

  1. MySQL主从复制的常用拓扑结构
  2. oracle电子商务套件视频,Oracle电子商务套件培训 Oracle EBS R12 制造模块培训视频教程 Oracle管理套件教程...
  3. 淘宝+天猫+闲鱼卖的翻新货店家汇总(持续更新)
  4. java 关键字 sizeof_Java 基本数据类型 sizeof 功能
  5. 断开式 Dgv 修改数据 winform
  6. kylin: build cube Hbase: Region Server 意外退出
  7. poj 2502 Subway dijkstra基础 !!!!入门题
  8. 计算机英语新增词汇,GRE新增词汇汇总
  9. 并联机构工作空间求解_结构计算软件—结构力学求解器
  10. Python爬虫实战之利用多线程爬取千图网的素材图片
  11. 计算机网络上不去的原因是什么,路由器有信号却上不了网是什么原因?
  12. Access to script at ‘file:///D:/html/vue-%E6%A8%A1%E5%9D%97%E5%8C%96%E5%BC%80%E5%8F%91/js/aaa.js‘ fr
  13. 通过nodejs搭建HTTP服务器
  14. 史上最全大数据学习资源整理
  15. 0018 求球的表面积和体积
  16. java设计模式之状态机模式
  17. showdialog 尝试读取或写入受保护的内存_轻松一键上4000MHz,XPG龙耀D50 重装RGB内存值不值得高端用户选购?...
  18. 制作PDF文件全攻略
  19. win7系统调用tts的语音朗读功能
  20. wireshark域名过滤

热门文章

  1. 解决chrome浏览器应用商店排版混乱问题
  2. 组合数的几种计算方法
  3. Who do you think is the best coder, and why?
  4. 2016年Kubernetes(k8s)大事记
  5. 67.Python修炼之路【72-前端-HTML列表】2018.06.28
  6. java web工程中如何添加图片_java web中如何添加图片
  7. java安全体系:JCA、JCE、JSSE、JAAS
  8. 网络中常用的各种协议名称(中英文)和具体含义
  9. 频繁出现域名无法解析该如何处理
  10. does not exist or is not a readable directory