用Java实现文本文件其他编码格式转UTF-8编码格式
最近把播放器的固件升级了,结果歌词全部变成了乱码,中文出现乱码基本都是编码格式的问题。
一个一个的手动修改太麻烦了,就写了一个简单的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编码格式相关推荐
- java获取文件编码_java如何获取文件编码格式
1:简单判断是UTF-8或不是UTF-8,因为一般除了UTF-8之外就是GBK,所以就设置默认为GBK. 按照给定的字符集存储文件时,在文件的最开头的三个字节中就有可能存储着编码信息,所以,基本的原理 ...
- java对文本文件进行操作:读取、修改、添加、删除、重命名等
java对文本文件进行操作:读取.修改.添加.删除.重命名等 Java IO 也称为IO流,IO = 流,它的核心就是对文件的操作,对于 字节 .字符类型的输入和输出流. IO是指对数据流的输入和输出 ...
- 文本文件 java,java 写文本文件
code 1:将特定String写入特定文件,不覆盖. import java.io.*; import java.util.*; public class OutputLog { public st ...
- JAVA——读取文本文件的倒数第N行(模拟Linux中tail命令)
解决方案 1.引入jar包commons-io.jar /*** 读取文件的倒数第3行,并打印其内容*/import java.io.File; import java.io.IOException; ...
- 使用Java操作文本文件的方法详解
使用Java操作文本文件的方法详解 摘要: 最初java是不支持对文本文件的处理的,为了弥补这个缺憾而引入了Reader和Writer两个类 最初java是不支持对文本文件的处理的,为了弥补这个缺憾而 ...
- Java读取文本文件的内容
Java读取文本文件的内容 文本内容如下: 下面展示一些 内联代码片. package my; import java.io.File; import java.io.FileInputStream; ...
- JAVA读取文本文件内容以流的形式返回到前端
JAVA读取文本文件内容以流的形式返回到前端 此方法放Controller ServletOutputStream out = null;ByteArrayOutputStream baos = nu ...
- Java 读取文本文件
文章目录 File FileReader InputStreamReader BufferedReader(解决方法在这里) 解决中文乱码 FileInputStream 我想用Java 读取文本文件 ...
- eclipse怎样改编码格式_Eclipse中各种编码格式及设置
操作系统:Windows 10(家庭中文版) Eclipse版本:Version: Oxygen.1a Release (4.7.1a) 刚看到一篇文章,里面介绍说Ascii.Unicode是编码,而 ...
最新文章
- 动态划分VLAN的方法中不包括(23)。【答案】C
- Java编程基础-运算符
- 计算机电容的作用,电容和电感的作用
- MQ日常维护操作手册
- php 设置window计划任务,windows下设置计划任务自动执行PHP脚本
- java arrays方法_Java工具类Arrays中不得不知的常用方法
- IBM 收购 RedHat(红帽)!340 亿美元
- 90-40-010-源码-CUBE-引擎为MR写入Druid的构建
- CentOS 7中防火墙 firewall-cmd命令
- 友盟分享没有链接的问题
- B/S架构 Web打印程序(Argox)
- 【君思智慧园区】智慧园区建设规划方案
- Exploit开发系列教程-Windows基础shellcode
- html如何调用flash插件,htmlflash播放器插件如何播放 网页播放器flash插件怎么解决...
- valgrind:内存泄漏 memory leak 调试教程
- Cisco交换机产品线和主要产品--- 型号说明
- 关于x86中为什么CS:IP里的0xffff左移四位是0xffff0
- 致:同年代的童真童鞋们
- 华为服务器故障灯不开机_华为服务器
- 基于C++的带权无向图的实现 (三)- Prim最小生成树算法