【文件的转码复制操作方法】

来源:互联网 发布:java银行项目面试简历 编辑:程序博客网 时间:2024/05/29 18:59
package translate;
/**
 * \(^o^)/~小伙伴们再也不用为从linux上移植代码到win7上而烦恼啦!
 * 一个一个的自己修改编码是不是太累了呢~~(╯﹏╰),这个程序可以将
 * 一个文件夹中的所有java进行转码,方便快捷。
 * 
 * 功能: 将源文件夹中的内容复制到目标文件夹下,
 * 并且将其中的所有java文件(以.java结尾的java文件)的编码由
 * 'utf-8' 转为'gbk'格式
 * (文件夹中的其他文件编码不变)。
 * 
 * 注: 1.如果源文件的编码不为'utf-8',则转码后会出现乱码
 * 2.文件格式可以自己修改,实现不同格式转换
 * 3.修改第二个(testName())方法中的".java"可以实现其他格式文件的转换
 * 如改为".txt"、"html"等等
 */


import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Scanner;


public class Test {
/**
* 文件转码及复制的方法
* @param in 源文件
* @param out 目标文件
* @param copy 判断是进行复制操作还是转码
*/
public void transDictionary(File in,File out,boolean copy){
//创建对指定文件的输入输出流
BufferedReader reader = null;
PrintWriter writer = null;
try {
FileInputStream fis
= new FileInputStream(in);
InputStreamReader isr = null;
//判断是进行复制操作还是进行转码
if(copy){
isr = new InputStreamReader(fis);
}else{
//在此修改源文件的编码模式
isr = new InputStreamReader(fis,"utf-8");
}
reader = new BufferedReader(isr);
FileOutputStream fos
= new FileOutputStream(out);
OutputStreamWriter osw = null;
if(copy){
osw = new OutputStreamWriter(fos);
}else{
//在此修改目的文件的编码模式
osw = new OutputStreamWriter(fos,"gbk");
}
writer = new PrintWriter(osw,true);
String msg = null;
while((msg=reader.readLine())!=null){
writer.println(msg);
}


} catch (Exception e) {
e.printStackTrace();
}finally{
//关闭流
try {
reader.close();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}}}




/**
* 判断是否是以.java结尾的文件,
* 从而判断是否是java文件
* @param file 进行判断的文件夹
* @return 返回判断结果
*/
public boolean testName(File file){
String name = file.getName();
return name.endsWith(".java");
}


/**
* 此方法用递归的思想实现主要功能:
* 进行文件的复制及其中java文件的转码功能
* @param in 源文件夹
* @param out 目标文件夹
*/
public void translate(File in,File out){
//判断in文件夹是否是目录
if(in.isDirectory()){
//对in文件夹下的子文件夹和子文件进行操作
for(File file:in.listFiles()){
//获取in文件夹下的子文件夹或文件的名字
String name = file.getName();
//在out文件夹下创建同名文件夹或文件的对象,进行复制操作的准备工作
File fileCopy = new File(out+File.separator+name);
//如果是文件就进行转码或复制
if(file.isFile()){
try {
//创建文件
fileCopy.createNewFile();
//判断是进行转码还是直接复制
if(testName(file)){
//进行转码
transDictionary(file,fileCopy,false);
}else{
//进行复制
transDictionary(file,fileCopy,true);
}
} catch (IOException e) {
e.printStackTrace();
}


}//如果是文件夹就进行递归
else if(file.isDirectory()){
//创建文件夹
fileCopy.mkdir(); 
//进行递归
translate(file,fileCopy);
}}}}


/**
* main方法入口
* 输入源文件夹的路径和目标文件夹的路径
* 例如在windows下的路径:
* 若在d盘下的sourse文件为源文件则其路径为:
* D:\sourse
* @param args
*/
public static void main(String[] args){
Test test = new Test();
Scanner console = new Scanner(System.in);
System.out.println("请输入源文件的路径:");
String inputPath = console.nextLine();
File in = new File(inputPath);
System.out.println("请输入目标文件的路径:");
String outputPath = console.nextLine();
File out = new File(outputPath);
System.out.println("正在转换. . .");
test.translate(in,out);
System.out.println("转换完毕!");
}
}
0 0