最近把播放器的固件升级了,结果歌词全部变成了乱码,中文出现乱码基本都是编码格式的问题。
一个一个的手动修改太麻烦了,就写了一个简单的java代码来实现批量转换一下。
主要完成的


import info.monitorenter.cpdetector.io.CodepageDetectorProxy;
import info.monitorenter.cpdetector.io.JChardetFacade;
import javafx.scene.shape.Line;import java.io.*;
import java.nio.charset.Charset;
import java.util.Scanner;public class EncodingConvertToUTF8 {public static void main(String[] args) throws Exception {// 输入要转换的文件夹目录Scanner sc=new Scanner(System.in);String name=sc.nextLine();File file = new File(name);convertToUTF8(file);}//开始转换private static void convertToUTF8(File file) throws Exception {// 判断目标下是不是文件if (file.isFile()) {// 歌词文件.lrc结尾,进行判断,防止对音频文件进行转换if (file.getPath().indexOf(".lrc")==-1) {return;}String path = file.getPath();// 创建文件输入流FileInputStream fis = new FileInputStream(file);// 获取编码方式 。进行判断,跳过UTF-8的文件if (!getCharset(file).equals("UTF-8")) {convertEncoding(fis,file);}} else {for (File subFile : file.listFiles()) {// 递归修改convertToUTF8(subFile);}}}/*** 对文件进行编码转换* @param fis* @param file* @throws Exception*/private static void convertEncoding (FileInputStream fis,File file )throws Exception{// 输入流,对文件进行读取InputStreamReader isr = new InputStreamReader(fis, getCharset(file));BufferedReader br = new BufferedReader(isr);StringBuilder sb = new StringBuilder();String line = "";// 读一行,写一行,换一行while ((line=br.readLine())!=null){sb.append(line+new Line());}// 释放流br.close();isr.close();// 删除原文件file.delete();// 将 StringBuilder 中的流转换成utf-8格式输出byte[] utf8Bytes = sb.toString().getBytes("UTF-8");// 转换为字符串String utf8Str = new String(utf8Bytes, "UTF-8");// 重新写入新uft-8文件File targetFile = new File(file.getPath());FileOutputStream fos = new FileOutputStream(targetFile);OutputStreamWriter osw = new OutputStreamWriter(fos, "utf8");BufferedWriter bw = new BufferedWriter(osw);bw.write(utf8Str);bw.close();osw.close();}/*** 获取文件编码方式* cpdetector_1.0.10.jar* 此处需要第三方jar提供支持,可以自行搜索搜索其他方法。或者在官网下载此包。下载链接如下* https://sourceforge.net/projects/cpdetector/* 另外cpdetector需要 antlr-2.7.4.jar chardet-1.0.jar jargs-1.0.jar 这三个包的支持* @param file* @return* @throws Exception*/public static String getCharset(File file) throws Exception {CodepageDetectorProxy detectorProxy = CodepageDetectorProxy.getInstance();JChardetFacade facade = JChardetFacade.getInstance();detectorProxy.add(facade);Charset charset = detectorProxy.detectCodepage(file.toURL());System.out.println("当前文件编码格式:"+ charset.name());return charset.name();}
}

运行效果如下:

目标文件夹。可以不单独把lrc文件放在一起

在控制台输入目标文件夹路径。

回车运行,可以看到未转换编码前的文件编码格式。
已经完成了格式转换。

再次运行一次程序,看看编码转换是否成功。可以发现已经转换成了UTF-8格式。
这次输出的编码格式实际上是上一次转换后的结果,所以上一次是成功的。确认一下,再看一遍。

依赖的四个jar包

注意:
1.这套方法需要四个jar包的支持,缺一不可。

小心敲码,大胆运行。

用Java实现文本文件其他编码格式转UTF-8编码格式相关推荐

  1. java获取文件编码_java如何获取文件编码格式

    1:简单判断是UTF-8或不是UTF-8,因为一般除了UTF-8之外就是GBK,所以就设置默认为GBK. 按照给定的字符集存储文件时,在文件的最开头的三个字节中就有可能存储着编码信息,所以,基本的原理 ...

  2. java对文本文件进行操作:读取、修改、添加、删除、重命名等

    java对文本文件进行操作:读取.修改.添加.删除.重命名等 Java IO 也称为IO流,IO = 流,它的核心就是对文件的操作,对于 字节 .字符类型的输入和输出流. IO是指对数据流的输入和输出 ...

  3. 文本文件 java,java 写文本文件

    code 1:将特定String写入特定文件,不覆盖. import java.io.*; import java.util.*; public class OutputLog { public st ...

  4. JAVA——读取文本文件的倒数第N行(模拟Linux中tail命令)

    解决方案 1.引入jar包commons-io.jar /*** 读取文件的倒数第3行,并打印其内容*/import java.io.File; import java.io.IOException; ...

  5. 使用Java操作文本文件的方法详解

    使用Java操作文本文件的方法详解 摘要: 最初java是不支持对文本文件的处理的,为了弥补这个缺憾而引入了Reader和Writer两个类 最初java是不支持对文本文件的处理的,为了弥补这个缺憾而 ...

  6. Java读取文本文件的内容

    Java读取文本文件的内容 文本内容如下: 下面展示一些 内联代码片. package my; import java.io.File; import java.io.FileInputStream; ...

  7. JAVA读取文本文件内容以流的形式返回到前端

    JAVA读取文本文件内容以流的形式返回到前端 此方法放Controller ServletOutputStream out = null;ByteArrayOutputStream baos = nu ...

  8. Java 读取文本文件

    文章目录 File FileReader InputStreamReader BufferedReader(解决方法在这里) 解决中文乱码 FileInputStream 我想用Java 读取文本文件 ...

  9. eclipse怎样改编码格式_Eclipse中各种编码格式及设置

    操作系统:Windows 10(家庭中文版) Eclipse版本:Version: Oxygen.1a Release (4.7.1a) 刚看到一篇文章,里面介绍说Ascii.Unicode是编码,而 ...

最新文章

  1. 动态划分VLAN的方法中不包括(23)。【答案】C
  2. Java编程基础-运算符
  3. 计算机电容的作用,电容和电感的作用
  4. MQ日常维护操作手册
  5. php 设置window计划任务,windows下设置计划任务自动执行PHP脚本
  6. java arrays方法_Java工具类Arrays中不得不知的常用方法
  7. IBM 收购 RedHat(红帽)!340 亿美元
  8. 90-40-010-源码-CUBE-引擎为MR写入Druid的构建
  9. CentOS 7中防火墙 firewall-cmd命令
  10. 友盟分享没有链接的问题
  11. B/S架构 Web打印程序(Argox)
  12. 【君思智慧园区】智慧园区建设规划方案
  13. Exploit开发系列教程-Windows基础shellcode
  14. html如何调用flash插件,htmlflash播放器插件如何播放 网页播放器flash插件怎么解决...
  15. valgrind:内存泄漏 memory leak 调试教程
  16. Cisco交换机产品线和主要产品--- 型号说明
  17. 关于x86中为什么CS:IP里的0xffff左移四位是0xffff0
  18. 致:同年代的童真童鞋们
  19. 华为服务器故障灯不开机_华为服务器
  20. 基于C++的带权无向图的实现 (三)- Prim最小生成树算法

热门文章

  1. 微软和海量科技合作 推企业搜索引擎新方案
  2. 新能源车加速内卷,下一程拼什么
  3. 人生感悟:塑造阳光心态走向阳光未来的方法
  4. ISO-8859是什么?
  5. Python中的replace方法
  6. QT检测电脑是否能够上网
  7. word文档docx解密,word文档docx权限密码怎么解开?
  8. 如何让ie的session不共享,如每打开一个新ie窗体都是单独的session,用于单计算机登陆不用账号
  9. *.hbm.xml总结
  10. 对对象数组进行分组的最有效方法