使用JD-GUI反编译Jar源码的时候,点击Save all source,保存为zip包,而包中的源码每行都多出了注释/** */ 标记,所以下面的代码则为去除每行的注释标记;
如下:
package com.htjc.netpay;
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.PrintWriter;
public class FileTest {
/**
*
* 删除文本中所有的 \* *\ 注释标记
* @param oldStr
* 查找内容
* @param replaceStr
* 替换内容
*/
public static void replaceTxtBy(File file) {
System.out.println("扫描文件:"+file.getPath()+" 所有注释");
String temp = "";
try {
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis,"utf-8");
BufferedReader br = new BufferedReader(isr);
StringBuffer buf = new StringBuffer();
int b = -1;
int a = -1;
// 保存该行前面的内容
boolean falg =false;
while ((temp = br.readLine()) != null) {
a = temp.indexOf("/*");
if(a!=-1){
falg = true;
}
b = temp.indexOf("*/");
if(falg && b!=-1){
temp = temp.substring(b+2);
falg = false;
b = -1;
}
if(!falg){
buf.append(temp).append(System.getProperty("line.separator"));
}
}
br.close();
FileOutputStream fos = new FileOutputStream(file);
PrintWriter pw = new PrintWriter(fos);
pw.write(buf.toString().toCharArray());
pw.flush();
pw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void scanFile(String path){
File f = new File(path);
if(f.isDirectory()){
File[] files = f.listFiles();
for(File fis :files){
scanFile(fis.getPath());
}
}else{
if(f.getName().indexOf(".java")!=-1){
replaceTxtBy(f);
}
}
}
/**
* main方法测试
* @param s
* @throws IOException
*/
public static void main(String[] s) throws IOException {
scanFile("D:\\fdfs");
}
}