直接上代码

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 更改文件编码相关推荐

  1. java生成html 控制编码方式_JAVA中文字符编码问题详解 控制台输出

    JAVA的中文字符乱码问题一直很让人头疼.特别是在WEB应用中.网上的分析文章和解决方案都很多,但总是针对某些特定情况的.很多次遇到乱码问题后, 经过极为辛苦的调试和搜索资料后终于解决,满以为自己已经 ...

  2. Windows技巧:右键文件打开方式,该文件没有与之关联来执行该操作

    Windows技巧:右键文件打开方式,该文件没有与之关联来执行该操作 正文 参考链接 正文 报错如下: 搜索关键词: 文件打开方式 该文件没有与之关联来执行该操作 原因: 右键选择默认文件打开方式相关 ...

  3. 计算机文件管理word,WORD打开文件的方式和管理文件-word技巧-电脑技巧收藏家

    WORD打开文件的方式和管理文件 1以不同方式打开文档 首先在"打开"对话框中将文件选中,然后单击"打开"下拉按钮,看到了吗?Word 2000提供了四种方式打 ...

  4. 计算机文件排列方式怎么调,文件夹默认大图标-如何更改所有文件夹的图标排列方式和查看方式 – 手机爱问...

    2014-03-17 相册里怎么隐藏文件夹?桌面图标能不能不自动排列? 鼠标右键--查看--自动排列图标 先随便找一张用于隐藏文件的图片,如下图1所示的1.jpg. 2 把要隐藏的目标文件打包压缩,例 ...

  5. java图片上传下载_java web 文件上传与下载

    组件工作流程:WEB服务器request ServletFil eupLoad DiskFileItem Factory代表普通字段的FileItem代表上传文件1FileItem代表上传文件2Fil ...

  6. java改变变量编码方式_Java 8中的5个功能将改变您的编码方式

    java改变变量编码方式 Java 8在JVM和语言级别都包含了一些非常令人兴奋的功能. 尽管最初为该发行版设想的某些功能已扩展到第9版,或已推出第9版,但实际上有数十个新功能. 许多新添加的内容在编 ...

  7. java压缩zip文件夹错误_Java将文件或者文件夹压缩成zip(修复文件夹中存在多个文件报Stream Closed错误问题)...

    项目场景: Java将文件或者文件夹压缩成zip(修复文件夹中存在多个文件报Stream Closed错误问题) 问题描述: 最近的项目需要将多级文件夹压缩成zip,网上找了几个工具类,都会报错,所以 ...

  8. java图片上传下载_java实现文件的上传和下载

    1. servlet 如何实现文件的上传和下载? 1.1上传文件 参考自:http://blog.csdn.net/hzc543806053/article/details/7524491 通过前台选 ...

  9. java 文件随机读取_Java 实现文件随机读写-RandomAccessFile

    现有如下的一个需求,向已存在1G数据的txt文本里末尾追加一行文字,内容如下"Lucene是一款非常优秀的全文检索库".可能大多数朋友会觉得这个需求很easy,说实话,确实easy ...

  10. java 文件转换字符串_java字符串文件互相转换

    Java字符串与文件的互转 Java中有时候需要读取一个文本类的文件,将其转换为字符串,然后做进一步处理.Java中没有现成的API方法,自己手动实现一个,大家来分享. 一.字符串转换为文件 /** ...

最新文章

  1. Using the URLconf defined in catsui.urls, Django tried these URL patterns, in this order:
  2. 开启AngularJS 1.X的学习之路(1)
  3. python中history()_keras中的History对象用法
  4. 使用maven引入Apache poi jar包
  5. 1030利用三层交换机实现VLAN间通信
  6. Rabbitmq消息可靠投递和重复消费等问题解决方案
  7. [USACO13JAN] Seating
  8. python的any函数_Python any()函数
  9. 借助终端软件,有效统一移动互联网和物联网
  10. 7.5 SNN《脉冲神经网络研究进展综述》笔记
  11. 杨百翰大学计算机科学专业,杨百翰大学研究生什么专业好
  12. 高级域渗透技术之再谈Kerberoast攻击
  13. 关闭各种广告弹窗……
  14. 【计算机网络】:IP分片详解及例题
  15. JZOJ 5984. 【北大2019冬令营模拟2019.1.1】仙人掌
  16. 软件工程(速成)——第三章 需求分析
  17. 康佳android 9tv,康佳易TV史上最大规模系统升级 安卓4.4体验
  18. 提高百度收录:如何使用API提交之PHP推送功能(实操)
  19. 可编程DDC控制器的实现 (1)
  20. 支付宝(查询对账单下载地址+文件下载+解压+遍历文件+读文件)

热门文章

  1. pano2vr输出的HTML手机可以看吗,Pano2VR怎么导出手机可看_ Pano2VR导出手机查看教程...
  2. printf()函数输出数据格式汇总
  3. python课程计算bmi_Python第十一课 计算体脂率1.0
  4. 移动前端开发和web前端开发的区别
  5. 四叉树空间索引原理及其实现
  6. 公共数据 | CnOpenData中国90座城市建筑物屋顶矢量数据集
  7. JavaScript设计模式——访问者模式
  8. 艾敦制表神器实现EXCEL邮件合并
  9. 深海迷航坐标传送代码_深海迷航代码输入方法
  10. 从tushare pro获取上证指数内成分股权重排序分出等级