最近手里好几个项目都在频繁的更新,我一直使用svn的patch制作补丁,但是因为class是不受svn管理的,每次更新的类都要手动的一个一个复制出来,少的时候没感觉怎么样,最近太多了,弄的我焦头烂额的,所以写了个小东西,自动根据已有的java文件,找对应的class复制过来。这样果然方便多了。
?
?
package com.radium.createpatch;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;/** * 创建补丁 * * @author XieLei * @update 2011-11-9 下午2:15:45 */public class CreatePatch { static String path1 = "C:\\Users\\Radium-Work\\Desktop\\2011-11-9 84-140\\WebRoot\\WEB-INF\\classes"; static String path2 = "D:\\WorkSpace\\neuedu-metallurgy\\trunk\\neuedu-metallurgy\\WebRoot\\WEB-INF\\classes"; public static void main(String[] args) { File file1 = new File(path1); File file2 = new File(path2); if (file1.exists() && file2.exists()) { createPath(file1); } System.out.println("共复制:"+count); } static File tempFile1; static File tempFile2; static String tempStr; static int count = 0; public static void createPath(File file) { if (file.exists()) { File[] files = file.listFiles(); for (File f : files) { if (f.isDirectory()) { createPath(f); } else { if (f.getName().endsWith(".java")) { count++; tempStr = path2 + f.getPath().substring(path1.length(), f.getPath().length()); tempStr = tempStr .substring(0, tempStr.lastIndexOf(".")) + ".class"; tempFile1 = new File(tempStr); tempFile2 = new File(f.getPath().substring(0, f.getPath().lastIndexOf("\\")+1)+f.getName().subSequence(0, f.getName().lastIndexOf(".")) +".class"); if(tempFile1.exists()){ try { copyFile(tempFile1,tempFile2); f.delete(); } catch (Exception e) { e.printStackTrace(); } } System.out.println(f.getName()); } } } } } /** * 将F1复制到F2 * @param f1 * @param f2 * @return * @throws Exception * @author XieLei * @update 2011-11-9 下午2:42:09 */ public static void copyFile(File f1, File f2) throws Exception { int length = 2097152; FileInputStream in = new FileInputStream(f1); FileOutputStream out = new FileOutputStream(f2); byte[] buffer = new byte[length]; int ins = 0; while (true && ins != -1) { ins = in.read(buffer); if(ins != -1) out.write(buffer, 0, ins); } in.close(); out.flush(); out.close(); }}