当前位置: 移动技术网 > IT编程>开发语言>Java > 荐 批量删除项目代码注释 支持单行// 多行/* 支持前端后端 C# JAVA vue js html

荐 批量删除项目代码注释 支持单行// 多行/* 支持前端后端 C# JAVA vue js html

2020年07月14日  | 移动技术网IT编程  | 我要评论

先预览一下成果吧~

在这里插入图片描述

  1. 批量删除代码中的注释
  2. 支持多种文件后缀 (.java、.cs、.aspx、.html、.vue、.js、.css、.wxml、…)
  3. 支持多种注释类型(//、/**/、///…) < !–xxx–>这样的块注释 暂时没有处理 ,有空再加。

实现原理: 循环项目目录下指定后缀的子文件 .cs .vue .js…

一行一行读取内容 检测到指定注释类型 // /* … 就剔除该行代码

最后重写入文件

附上实现代码(C#控制台):

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DeleteNotes
{
    class Program
    {
        static void Main(string[] args)
        {
            Delete Delete = new Delete();


            Console.WriteLine("----------欢迎使用诗肴小工具----------");
            Console.WriteLine("");
            Console.WriteLine("-----------请输入文件夹路径-----------");
            String Path = Console.ReadLine();

            //循环项目文件并删除注释
            Delete.DeleteNotes(Path);

            Console.WriteLine("");
            Console.WriteLine("--------------操作文件结束,结果统计如下:--------------");
            Console.WriteLine("");
            Console.WriteLine("项目文件数:" + Delete.FileAmount + " ,指定后缀文件:" + Delete.SuccessAmount + " ,操作成功:" + Delete.SuccessAmount + " ,操作失败:" + Delete.FailAmount);
            Console.ReadLine();
        }

    }

    /// <summary>
    /// 删除类
    /// </summary>
    public class Delete
    {
        /// <summary>
        /// 指定文件后缀 带点扩展名 ".xxxx" 列表
        /// </summary>
        List<String> ExtensionList = new List<string>();
        /// <summary>
        /// 指定注释类型 
        /// </summary>
        List<String> NotesList = new List<string>();

        //文件数量
        public Int32 FileAmount = 0;
        //操作文件数量
        public Int32 HasActionFileAmount = 0;
        //成功文件数量
        public Int32 SuccessAmount = 0;
        //失败文件数量
        public Int32 FailAmount = 0;

        /// <summary>
        /// 构造方法
        /// </summary>
        public Delete()
        {
            //文件数量
            FileAmount = 0;
            //操作文件数量
            HasActionFileAmount = 0;
            //成功文件数量
            SuccessAmount = 0;
            //失败文件数量
            FailAmount = 0;

            #region 指定文件后缀
            //添加需要删除注释的文件后缀
            ExtensionList.Add(".vue");
            ExtensionList.Add(".js");
            ExtensionList.Add(".css");
            ExtensionList.Add(".scss");
            ExtensionList.Add(".wxss");
            ExtensionList.Add(".wxml");
            ExtensionList.Add(".json");
            ExtensionList.Add(".cs");
            ExtensionList.Add(".xml");
            ExtensionList.Add(".html");
            ExtensionList.Add(".asax");
            ExtensionList.Add(".Master");
            ExtensionList.Add(".aspx");
            ExtensionList.Add(".java");
            #endregion

            #region 指定注释类型
            //添加需要删除注释
            NotesList.Add("//");
            NotesList.Add("/*");
            NotesList.Add("*/");
            NotesList.Add("<!--");
            NotesList.Add("-->");
            NotesList.Add("///");
            NotesList.Add("<%--");
            NotesList.Add("--%>");
            NotesList.Add("◇");//这里是本人个性化的注释 可删除
            #endregion
        }

        /// <summary>
        /// 循环项目文件并删除注释
        /// 实现原理:
        /// 循环项目所有指定后缀的子文件 .cs .vue .js.....
        /// 然后一行一行读取内容 如果检测到 // /* ... 就剔除
        /// 最后重写文件
        /// </summary>
        public void DeleteNotes(String FilePath)
        {
            try
            {
                #region 循环项目文件
                //实例化项目目录
                DirectoryInfo MyDirectory = new DirectoryInfo(FilePath);
                //获取目录下所有文件和子目录
                FileSystemInfo[] FileList = MyDirectory.GetFileSystemInfos();
                //循环文件
                foreach (FileSystemInfo Item in FileList)
                {
                    FileSystemInfo FileInfo = Item;
                    //判断是否为文件夹
                    if (FileInfo is DirectoryInfo)
                    {
                        //递归调用
                        DeleteNotes(FileInfo.FullName);
                    }
                    else
                    {
                        //文件数量
                        FileAmount++;
                        //获取文件后缀 带点扩展名 ".xxxx"
                        String Extension = Path.GetExtension(FileInfo.FullName);
                        //指定后缀类型文件才操作
                        if (ExtensionList.Contains(Extension))
                        {
                            //操作文件数量
                            HasActionFileAmount ++;
                            //--------开始处理文件-----------

                            try
                            {
                                #region 操作文件
                                //操作单行内容
                                //读取文件内容 一次读取一行
                                StreamReader StreamReader = new StreamReader(FileInfo.FullName);
                                StringBuilder NewContent = new StringBuilder();
                                //内容行
                                String Line;
                                while ((Line = StreamReader.ReadLine()) != null)
                                {
                                    //是否包含注释
                                    Boolean HasNote = false;

                                    #region 判断是否包含指定注释
                                    //循环指定注释 
                                    foreach (var item in NotesList)
                                    {
                                        //判断是否包含注释 
                                        if (Line.IndexOf(item)>=0)
                                        {
                                            //只要包含一种注释 就可以终止循环 剔除本行代码
                                            HasNote = true;
                                            break;
                                        }
                                    }
                                    #endregion

                                    //无注释
                                    if (!HasNote)
                                    {
                                        //追加代码内容
                                        NewContent.AppendLine(Line);
                                    }
                                }
                                //释放资源
                                StreamReader.Close();
                                //重新写入文件内容
                                File.WriteAllText(FileInfo.FullName, NewContent.ToString());
                                //成功文件数量
                                SuccessAmount ++;
                                //Console.WriteLine("操作文件: 《" + FileInfo.FullName + "》 成功");

                                #endregion

                            }
                            catch (Exception err)
                            {
                                //失败文件数量
                                FailAmount ++;
                                Console.WriteLine("操作文件: 《"+ FileInfo.FullName + "》 失败,原因:"+err.Message);
                            }

                            //--------结束处理文件-----------

                        }
                    }
                }
                #endregion

            }
            catch (Exception err)
            {
                Console.WriteLine("操作失败,原因:" + err.Message);
            }
        }

    }
}

本文地址:https://blog.csdn.net/qq_29096549/article/details/107309164

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网