删除 java 文件的中的注释
核心逻辑是:
1、 读取文件时,要一行一行的读取
2、 在一行代码中 首先要判断 双引号内的 内容 不需要删除的
3、 要删除 以 /*(/**) */ 开始与结束的注释代码块 和 以// 开始的行注释
4、 针对上述, 在写个方法 递归 目标文件或目录,即可实现批量删除文件中的注释
废话不多说,直接上代码
public class RemoveComments { private static boolean quoteFlag = false, lineStarFlag = false; public static void main(String[] args) { // 指定 一个要删除注释的 根目录 fileRecursion(new File("E:/work/test2/WebRoot/aa")); } // 文件递归 public static void fileRecursion(File file){ if(file != null){ if(file.isDirectory()){ File[] files = file.listFiles(); for(int i = 0; files != null && i < files.length; i ++) fileRecursion(files[i]); }else{ if(file.getName() != null && file.getName().endsWith(".java")){ // 只删除 .java文件中注释 if(removeComments(file, file)){ System.out.println(file.getName()+", remove:"+true); }else{ System.out.println(file.getName()+", remove:"+false); } } } } } // 开始 删除注释 public static boolean removeComments(File in, File out){ BufferedReader read = read(in); StringBuffer sb = new StringBuffer(); // 删减注释后的代码 if(read != null){ String line = null; try { while((line = read.readLine()) != null){ sb.append(analysisLine(line)); } } catch (IOException e) { e.printStackTrace(); return false; }finally{ try { if(read != null) read.close(); } catch (IOException e) { e.printStackTrace(); } } } return write(out, sb.toString()); } // 读文件 到缓冲区 public static BufferedReader read(File file){ BufferedReader br = null; try { br = new BufferedReader(new FileReader(file)); } catch (FileNotFoundException e) { e.printStackTrace(); } return br; } // 写文件 public static boolean write(File file, String content){ FileWriter fw = null; try { fw = new FileWriter(file); fw.write(content); fw.flush(); } catch (IOException e) { e.printStackTrace(); return false; }finally{ try { if(fw != null) fw.close(); } catch (IOException e) { e.printStackTrace(); } } return true; } // 分析 一行代码 是否有注释 public static StringBuffer analysisLine(String code){ StringBuffer sb = new StringBuffer(); if(code == null) return sb; for(int i = 0; i < code.length(); i++){ if(lineStarFlag){// 斜线星(/*) 开始了(包含了 /** ) if(i + 1 < code.length() && code.charAt(i) == '*' && code.charAt(i + 1) == '/'){ lineStarFlag = false; i ++; continue; } }else if (!quoteFlag) {// 先判断是否有 双引号 if(code.charAt(i) == '"'){// 双引号 开始了 sb.append(code.charAt(i)); quoteFlag = true; continue; }else{ // 不是 双引号 if(i + 1 < code.length() && code.charAt(i) == '/'){ if(code.charAt(i + 1) == '*'){// 以 /* 开始的注释代码 lineStarFlag = true; i ++; continue; }else if(code.charAt(i + 1) == '/'){// 以 // 开始的注释代码 i = code.length();// 直接 行结束了 }else{ sb.append(code.charAt(i));// 其他情况 } }else{ sb.append(code.charAt(i)); } } }else{ if (code.charAt(i) == '"' && code.charAt(i - 1) != '\\') { // 双引号结束了 sb.append(code.charAt(i)); quoteFlag = false; }else{ // 双引号开始了 但是没有结束 sb.append(code.charAt(i)); } } } // if(sb.length() != 0) // 如果 为空串,则 不添加换行 sb.append("\n"); return sb; } }
相关推荐
java_SQL文件批量删除注释 ,实现自动批量处理Sql脚本中的注释,方便发布您自己的脚本,简单好用。亲测可以用的,谢谢支持。
聪哥创作的一款批量保留路径清理代码注释的工具,目前兼容大部分常见的代码注释,涵盖c、java、python、php、js、html、css、mysql、node、vue、ruby等常见编程项目的注释无损清理。 2023年8月19日更新日志: 1.对...
本软件主要用于代码保密,即使是被他人获取了无注释源码也难以理解代码...能批量删除代码中的注释,C、C++、汇编语言均支持,自动识别汇编与C,能够批量添加,处理速度快。 软件直接处理目标文件,使用前请做好备份。
去除源代码注释,去除java源代码注释.
我们利用jd-gui反编译.classs代码之后,导出来的java源代码里面含有/**,其实这些标记是之前的java源码的注释,我们如何去掉这些标识了?需要利用jd-gui-cleaner.jar工具进行去掉,有需要的可以进行下载使用。 jd-...
去除编译文件中的注释
去除注释 去注释 目前简简单单一个去除.cpp的 //注释 和 /**/注释。 其他文件需要去除注释改改代码应该就可以实现了。
能良好的解决使用jd-gui.exe软件反编译程序后,在生成的java文件前部存在的注释: 1.仅支持删除java文件和txt文件;(如果想支持其他格式的文件,请用"."+格式后缀名替换clear_annot类的103行".txt"); 2.仅支持删除...
该工具是用于清除C/C++/Java中的// 或/**/的注释。可以对文件夹操作。处理速度非常快。
Java代码、注释模版格式文件
去除代码中的注释工具去除代码中的注释工具去除代码中的注释工具去除代码中的注释工具
用java编写的代码注释删除小工具,能去文本中掉//...第一个按钮的功能为去掉文本框1中代码的注释,输出到文本框2. 第二个按钮的功能为批量删除文件中的注释,并输出到当前目录(新文件名为xxx.txt)。但回车符会变成\n
使用python脚本快速删除java文件中的注释
C# 代码文件头部注释批量写入, 函数注释批量删除的工具
Java代码注释率检查器
SWFUPLoad 所有图标和代码注释汉化文件SWFUPLoad 所有图标和代码注释汉化文件SWFUPLoad 所有图标和代码注释汉化文件SWFUPLoad 所有图标和代码注释汉化文件SWFUPLoad 所有图标和代码注释汉化文件SWFUPLoad 所有图标和...
php写的批量去除各种代码中的版权注释代码,无论是php,asp,java还是xml都可以将里边的版权注释批量去掉然后换乘自己的版权代码!
java中删除java文件里的注释完整版
java反编译去除注释一建去除超级简单,反编译后的代码,一建去除注释,可直接引用
很简单朴素的算法,可以用有限状态自动机改进