java更改文件编码方式_java 更改文件编码
直接上代码
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class TransCoding {
//需要转编码的目录
private static String path = "C:\\Users\\Administrator\\Desktop\\123\\HelpUDcAppBG";
//定义另存目录。若不赋值(但此属性的值必须为字符串,如”“,不能为null)
//即当前目录下文件转变编码后会覆盖,包括子目录及其文件
private static String directory = "C:\\Users\\Administrator\\Desktop\\12";
//定义要转的文件类型。若不赋值(但此属性的值必须为字符串,如”“,不能为null)
//即转变当前目录下所有类型文件,包括子目录及其文件。
private static String typeName = "";
//要转的文件当前编码,默认GBK。因为一般硬盘文件默认ANSI,在中国即是GBK编码。
private static String codeBefore = "GB2312";
//要转的文件转后编码,默认UTF-8。
//需要注意的是如果被编码的文件是全英文的,没有汉字,那么即使下面指定UTF-8,
//有些计算机也不能生成UTF-8文件,可能与windows的转码有关,但全英文不影响性能。
private static String codeAfter = "UTF-8";
public static void main(String[] args){
File dir = new File(path);
File dirPath = new File(directory);
change(dir,dirPath,typeName);
}
public static void change(File dir,File dirPath,final String typeName){
BufferedReader bufferedReader = null;
BufferedWriter bufferedWriter =null;
//获得当前目录下的所有符合条件的对象,包括目录。
File[] files = dir.listFiles(new FilenameFilter(){
public boolean accept(File dir,String name){
//如果是目录,直接返回true,意味着可以直接加入listFiles方法里的集合中。
if(new File(dir,name).isDirectory()){
return true;
};
return name.endsWith(typeName);
}
});
for (File file : files) {
//如果没有指定另存目录名,此为当前目录的绝对路径
String pathAbsolute = null;
//如果没有指定另存目录名,此为当前文件编码后的绝对路径
File fileModify = null;
//定义另存目录对象
File createDir = null;
//定义另存目录中的文件对象
File createFile = null;
//如果当前file对象是一个目录,再调用此方法,递归。
if(file.isDirectory()){
//获取此目录绝对路径
String path = file.getAbsolutePath();
//截掉当前目录
String path2 = path.substring(0,path.lastIndexOf("\\"));
//获取到上级目录
String path3 = path2.substring(path2.lastIndexOf("\\"));
//封装成对象方便传递。
File file2 =null;
if(dirPath.getName()==null||dirPath.getName().trim()==""){
change(file,dirPath,typeName);
}else{
file2 = new File(dirPath,path3);
change(file,file2,typeName);
}
}else{//不是目录,直接转码
try {
//读取目录下文件,并按指定编码读取。
bufferedReader = new BufferedReader(new InputStreamReader(
new FileInputStream(file.getAbsolutePath()),codeBefore));
//如果另存目录为空,表示存放到当前目录。
if(dirPath.getName()==null||dirPath.getName()==""){
//绝对路径名 如 D:\action\1.txt
pathAbsolute = file.getAbsolutePath();
//截取后的路径 如D:\action\
String path1 = pathAbsolute.substring(0,
pathAbsolute.lastIndexOf(file.getName()));
//新路径 如 D:\action\11.txt
String pathModify = path1+"1"+file.getName();
fileModify = new File(pathModify);
bufferedWriter = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(fileModify),codeAfter));
}else{//否则,将转码后的文件写入指定的目录
String path = file.getAbsolutePath();
String fileName = file.getName();
//获取文件所在的绝对路径目录
String path2 = file.getAbsolutePath().substring(0,
path.lastIndexOf(fileName)-1);
//获取文件所在的上一级目录
String path3 = path2.substring(path2.lastIndexOf("\\"));
//创建另存目录
createDir = new File(dirPath,path3);
//这里是创建多级目录,防止条件转码时(例如后缀名为.java或.txt),
//符合条件的文件太深,造成目录创建失败,导致IO写入异常。
createDir.mkdirs();
createFile = new File(createDir,fileName);
bufferedWriter = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(createFile),codeAfter));
}
String line = null;
while((line=bufferedReader.readLine())!=null){
bufferedWriter.write(line);
bufferedWriter.newLine();
}
//我觉得这里写不写都一样,最终关闭流的时候也会刷新。
//如果写入while循环里会降低效率,每行都要刷新。
//因为那样写入磁盘的次数就增多了
bufferedWriter.flush();
} catch (Exception e) {
if(createDir!=null)
createDir.deleteOnExit();
if(createFile!=null)
createFile.deleteOnExit();
throw new RuntimeException("读写错误"+e);
}
finally{
if(bufferedReader!=null){
try {
bufferedReader.close();
} catch (IOException e) {
throw new RuntimeException("输入流关闭错误");
}
}
if(bufferedWriter!=null){
try {
bufferedWriter.close();
if(fileModify!=null){
//将原文件删除
file.delete();
//创建一个和原文件同名的File对象
File file3 = new File(pathAbsolute);
//将编码后的文件名改成原文件名
fileModify.renameTo(file3);
}
} catch (IOException e) {
throw new RuntimeException("输出流关闭错误");
}
}
}
}
}
}
}
java更改文件编码方式_java 更改文件编码相关推荐
- java生成html 控制编码方式_JAVA中文字符编码问题详解 控制台输出
JAVA的中文字符乱码问题一直很让人头疼.特别是在WEB应用中.网上的分析文章和解决方案都很多,但总是针对某些特定情况的.很多次遇到乱码问题后, 经过极为辛苦的调试和搜索资料后终于解决,满以为自己已经 ...
- Windows技巧:右键文件打开方式,该文件没有与之关联来执行该操作
Windows技巧:右键文件打开方式,该文件没有与之关联来执行该操作 正文 参考链接 正文 报错如下: 搜索关键词: 文件打开方式 该文件没有与之关联来执行该操作 原因: 右键选择默认文件打开方式相关 ...
- 计算机文件管理word,WORD打开文件的方式和管理文件-word技巧-电脑技巧收藏家
WORD打开文件的方式和管理文件 1以不同方式打开文档 首先在"打开"对话框中将文件选中,然后单击"打开"下拉按钮,看到了吗?Word 2000提供了四种方式打 ...
- 计算机文件排列方式怎么调,文件夹默认大图标-如何更改所有文件夹的图标排列方式和查看方式 – 手机爱问...
2014-03-17 相册里怎么隐藏文件夹?桌面图标能不能不自动排列? 鼠标右键--查看--自动排列图标 先随便找一张用于隐藏文件的图片,如下图1所示的1.jpg. 2 把要隐藏的目标文件打包压缩,例 ...
- java图片上传下载_java web 文件上传与下载
组件工作流程:WEB服务器request ServletFil eupLoad DiskFileItem Factory代表普通字段的FileItem代表上传文件1FileItem代表上传文件2Fil ...
- java改变变量编码方式_Java 8中的5个功能将改变您的编码方式
java改变变量编码方式 Java 8在JVM和语言级别都包含了一些非常令人兴奋的功能. 尽管最初为该发行版设想的某些功能已扩展到第9版,或已推出第9版,但实际上有数十个新功能. 许多新添加的内容在编 ...
- java压缩zip文件夹错误_Java将文件或者文件夹压缩成zip(修复文件夹中存在多个文件报Stream Closed错误问题)...
项目场景: Java将文件或者文件夹压缩成zip(修复文件夹中存在多个文件报Stream Closed错误问题) 问题描述: 最近的项目需要将多级文件夹压缩成zip,网上找了几个工具类,都会报错,所以 ...
- java图片上传下载_java实现文件的上传和下载
1. servlet 如何实现文件的上传和下载? 1.1上传文件 参考自:http://blog.csdn.net/hzc543806053/article/details/7524491 通过前台选 ...
- java 文件随机读取_Java 实现文件随机读写-RandomAccessFile
现有如下的一个需求,向已存在1G数据的txt文本里末尾追加一行文字,内容如下"Lucene是一款非常优秀的全文检索库".可能大多数朋友会觉得这个需求很easy,说实话,确实easy ...
- java 文件转换字符串_java字符串文件互相转换
Java字符串与文件的互转 Java中有时候需要读取一个文本类的文件,将其转换为字符串,然后做进一步处理.Java中没有现成的API方法,自己手动实现一个,大家来分享. 一.字符串转换为文件 /** ...
最新文章
- Using the URLconf defined in catsui.urls, Django tried these URL patterns, in this order:
- 开启AngularJS 1.X的学习之路(1)
- python中history()_keras中的History对象用法
- 使用maven引入Apache poi jar包
- 1030利用三层交换机实现VLAN间通信
- Rabbitmq消息可靠投递和重复消费等问题解决方案
- [USACO13JAN] Seating
- python的any函数_Python any()函数
- 借助终端软件,有效统一移动互联网和物联网
- 7.5 SNN《脉冲神经网络研究进展综述》笔记
- 杨百翰大学计算机科学专业,杨百翰大学研究生什么专业好
- 高级域渗透技术之再谈Kerberoast攻击
- 关闭各种广告弹窗……
- 【计算机网络】:IP分片详解及例题
- JZOJ 5984. 【北大2019冬令营模拟2019.1.1】仙人掌
- 软件工程(速成)——第三章 需求分析
- 康佳android 9tv,康佳易TV史上最大规模系统升级 安卓4.4体验
- 提高百度收录:如何使用API提交之PHP推送功能(实操)
- 可编程DDC控制器的实现 (1)
- 支付宝(查询对账单下载地址+文件下载+解压+遍历文件+读文件)
热门文章
- pano2vr输出的HTML手机可以看吗,Pano2VR怎么导出手机可看_ Pano2VR导出手机查看教程...
- printf()函数输出数据格式汇总
- python课程计算bmi_Python第十一课 计算体脂率1.0
- 移动前端开发和web前端开发的区别
- 四叉树空间索引原理及其实现
- 公共数据 | CnOpenData中国90座城市建筑物屋顶矢量数据集
- JavaScript设计模式——访问者模式
- 艾敦制表神器实现EXCEL邮件合并
- 深海迷航坐标传送代码_深海迷航代码输入方法
- 从tushare pro获取上证指数内成分股权重排序分出等级