• [原创]使用java批量修改文件编码(ANSI-->UTF-8)


    从网上下载的项目,有时候.java文件的编码是ANSI。导入到自己的MyEclipse后,查看项目源码的时候,总是乱码。

    一个个.java去修改的话, 既麻烦又不现实。所以写了下面这个工具类,进行批量转编码。

    代码的原理仅仅就是遍历文件,然后使用流,对按照文件的原编码进行读取,用目的编码进行写操作。

    直接上源码:

    package test;
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    
    public class Main {
    	// private String sDirectory = "D:/Workspaces/BeyondDiscuz/src/com";
    	private String sDirectory = "D:\Workspaces\BeyondDiscuz\src\com";
    	private String dDirectory = "D:\Workspaces\BeyondDiscuz\src\cn";
    
    	public static void main(String[] args) {
    		Main 吗 = new Main();
    		try {
    			吗.readerFile(吗.sDirectory);
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    
    	public void readerFile(String filePath) throws IOException {
    		if ("".equals(filePath) || null == filePath) {
    			return;
    		}
    
    		File f = new File(filePath);
    		if (f.isDirectory()) {
    			String[] child = f.list();
    			for (int i = 0; i < child.length; i++) {
    				String path = f.getAbsolutePath() + File.separator;
    				String newPath = path.replace(this.sDirectory, this.dDirectory);
    				child[i] = path + child[i];
    				File c = new File(child[i]);
    				String newFile = child[i].replace(this.sDirectory, this.dDirectory);
    				System.out.println("旧路径:" + path);
    				System.out.println("新路径:" + newPath);
    
    				File newP = new File(newPath);
    				if (!newP.exists())
    					newP.mkdir();
    
    				if (c.isFile()) {
    					System.out.println("旧文件:" + child[i]);
    					System.out.println("新文件:" + newFile);
    					// Charset US-ASCII ISO-8859-1 UTF-8 UTF-16BE UTF-16LE UTF-16  
    					BufferedReader r = new BufferedReader(new InputStreamReader(new FileInputStream(c), "GBK"));
    					// BufferedReader r = new BufferedReader(new InputStreamReader(new FileInputStream(c)));
    					File newF = new File(newFile);
    					newF.createNewFile();
    					// BufferedWriter w = new BufferedWriter(new
    					// OutputStreamWriter(new FileOutputStream(newF), "UTF-8"));
    					BufferedWriter w = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(newF)));
    					// BufferedWriter w = new BufferedWriter(new FileWriter(newFile));
    					String lineText = null;
    					while ((lineText = r.readLine()) != null) {
    						// String temp = new String(lineText.getBytes("ISO-8859-1"), "UTF-8");
    						w.write(lineText);
    						w.newLine();
    					}
    					w.close();
    					r.close();
    				} else {
    					readerFile(child[i]);
    				}
    			}
    		}
    	}
    
    }
    

     上面自己的写代码只是基本思路,下面是更简洁的代码:

    public static void main(String[] args) {
            try {
                String srcDirPath = "E:\eclipseWorkspaceSandbase\test";
                // 转为UTF-8编码格式源码路径
                String utf8DirPath = "E:\eclipseWorkspaceSandbase\test-8";
        
                // 获取所有java文件
                Collection<File> javaGbkFileCol = FileUtils.listFiles(new File(srcDirPath), new String[] { "java" }, true);
        
                for (File javaGbkFile : javaGbkFileCol) {
                    System.out.println(javaGbkFile);
                    // UTF8格式文件路径
                    String utf8FilePath = utf8DirPath + javaGbkFile.getAbsolutePath().substring(srcDirPath.length());
                    // 使用GBK读取数据,然后用UTF-8写入数据
                    FileUtils.writeLines(new File(utf8FilePath), "UTF-8", FileUtils.readLines(javaGbkFile, "GBK"));
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        
        }
  • 相关阅读:
    java file文件类操作使用方法大全
    java 中可以在方法中 新建 方法吗
    java InputStream读取数据问题
    file 创建方法
    java中File类的使用方法
    jquery怎么获取radio的值
    //初始化无限滚动分页组件
    表单提交 封装成json格式
    几个常用EL表达式的用法
    简单的顺序队列
  • 原文地址:https://www.cnblogs.com/Candies/p/5040473.html
Copyright © 2020-2023  润新知