【文件的轉碼複製操作方法】

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("轉換完畢!");
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章