java清除某包下文件的注释

java清除某包下文件的注释代码
package org;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * title: 清除注释
 * 
 * @author Administrator
 * @时间 2009-7-30:下午09:28:10
 */
public class ClearComment {
	/** 根目录 */
	public static String rootDir = "D:\\workspace\\demo\\src\\com";

	// "D:\\testdir
	// D:\\workspace\\proj_map\\src\\com
	public static void main(String args[]) throws FileNotFoundException, UnsupportedEncodingException {
		deepDir(rootDir);
	}

	public static void deepDir(String rootDir) throws FileNotFoundException, UnsupportedEncodingException {
		File folder = new File(rootDir);
		if (folder.isDirectory()) {
			String[] files = folder.list();
			for (int i = 0; i < files.length; i++) {
				File file = new File(folder, files[i]);
				if (file.isDirectory() && file.isHidden() == false) {
					System.out.println(file.getPath());
					deepDir(file.getPath());
				} else if (file.isFile()) {
					clearComment(file.getPath());
				}
			}
		} else if (folder.isFile()) {
			clearComment(folder.getPath());
		}
	}

	/**
	 * @param currentDir
	 *            当前目录
	 * @param currentFileName
	 *            当前文件名
	 * @throws FileNotFoundException
	 * @throws UnsupportedEncodingException
	 */
	/**
	 * @param filePathAndName
	 * @throws FileNotFoundException
	 * @throws UnsupportedEncodingException
	 */
	public static void clearComment(String filePathAndName) throws FileNotFoundException, UnsupportedEncodingException {
		StringBuffer buffer = new StringBuffer();
		String line = null; // 用来保存每行读取的内容
		InputStream is = new FileInputStream(filePathAndName);
		BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
		try {
			line = reader.readLine();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} // 读取第一行
		while (line != null) { // 如果 line 为空说明读完了
			buffer.append(line); // 将读到的内容添加到 buffer 中
			buffer.append("\r\n"); // 添加换行符
			try {
				line = reader.readLine();
			} catch (IOException e) {
				e.printStackTrace();
			} // 读取下一行
		}
		// 1、清除单行的注释,如: //某某,正则为 :\/\/.*
		// 2、清除单行的注释,如:/** 某某 */,正则为:\/\*\*.*\*\/
		// 3、清除单行的注释,如:/* 某某 */,正则为:\/\*.*\*\/
		// 4、清除多行的注释,如:
		// /* 某某1
		// 某某2
		// */
		// 正则为:.*/\*(.*)\*/.*
		// 5、清除多行的注释,如:
		// /** 某某1
		// 某某2
		// */
		// 正则为:/\*\*(\s*\*\s*.*\s*?)*
		String filecontent = buffer.toString();
		Map<String, String> patterns = new HashMap<String, String>();
		patterns.put("([^:])\\/\\/.*", "$1");// 匹配在非冒号后面的注释,此时就不到再遇到http://
		patterns.put("\\s+\\/\\/.*", "");// 匹配“//”前是空白符的注释
		patterns.put("^\\/\\/.*", "");
		patterns.put("^\\/\\*\\*.*\\*\\/$", "");
		patterns.put("\\/\\*.*\\*\\/", "");
		patterns.put("/\\*(\\s*\\*\\s*.*\\s*?)*\\*\\/", "");
		// patterns.put("/\\*(\\s*\\*?\\s*.*\\s*?)*", "");
		Iterator<String> keys = patterns.keySet().iterator();
		String key = null, value = "";
		while (keys.hasNext()) {
			// 经过多次替换
			key = keys.next();
			value = patterns.get(key);
			filecontent = replaceAll(filecontent, key, value);
		}
		System.out.println(filecontent);
		// 再输出到原文件
		try {
			File f = new File(filePathAndName);
			if (!f.getParentFile().exists()) {
				f.getParentFile().mkdirs();
			}
			FileOutputStream out = new FileOutputStream(filePathAndName);
			byte[] bytes = filecontent.getBytes("UTF-8");
			out.write(bytes);
			out.flush();
			out.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * @param fileContent
	 *            内容
	 * @param patternString
	 *            匹配的正则表达式
	 * @param replace
	 *            替换的内容
	 * @return
	 */
	public static String replaceAll(String fileContent, String patternString, String replace) {
		String str = "";
		Matcher m = null;
		Pattern p = null;
		try {
			p = Pattern.compile(patternString);
			m = p.matcher(fileContent);
			str = m.replaceAll(replace);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			m = null;
			p = null;
		}
		// 获得匹配器对象
		return str;
	}
}

以下是消除JAR压缩文件注释的两种方法: 1. 使用命令行工具 可以使用以下命令消除JAR文件中的注释: ```shell zip -d yourJar.jar 'META-INF/*.SF' 'META-INF/*.RSA' 'META-INF/*.DSA' 'META-INF/*.EC' 'META-INF/*.MF' 'META-INF/LICENSE' 'META-INF/NOTICE' 'META-INF/INDEX.LIST' 'META-INF/MANIFEST.MF' ``` 该命令将删除JAR文件中的所有META-INF目录下的文件,包括MANIFEST.MF文件和签名文件。 2. 使用Java代码 可以使用以下Java代码消除JAR文件中的注释: ```java import java.io.*; import java.util.*; import java.util.zip.*; public class RemoveCommentFromJar { public static void main(String[] args) throws Exception { String jarName = "yourJar.jar"; File jarFile = new File(jarName); File tempJarFile = new File(jarName + ".tmp"); JarInputStream jarIn = new JarInputStream(new FileInputStream(jarFile)); ZipOutputStream tempJarOut = new ZipOutputStream(new FileOutputStream(tempJarFile)); byte[] buffer = new byte[1024]; int bytesRead; try { while (true) { JarEntry entry = jarIn.getNextJarEntry(); if (entry == null) { break; } if (!entry.getName().startsWith("META-INF/")) { tempJarOut.putNextEntry(new JarEntry(entry.getName())); while ((bytesRead = jarIn.read(buffer)) != -1) { tempJarOut.write(buffer, 0, bytesRead); } } } } finally { jarIn.close(); } tempJarOut.close(); jarFile.delete(); tempJarFile.renameTo(jarFile); } } ``` 该代码将创建一个临时JAR文件,然后将原始JAR文件中除META-INF目录下的文件之外的所有文件复制到临时JAR文件中。最后,删除原始JAR文件并将临时JAR文件重命名为原始JAR文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

10年程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值