`
53873039oycg
  • 浏览: 841489 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Java应用之删除Java文件的Main方法

    博客分类:
  • java
 
阅读更多

      先说下为什么要删除main方法,由于部分同事在本地写了main方法测试代码,提交代码时候忘记把main方法删除,导致代码不规范,所以需要有一个方法能删除java文件中的main方法。

      首先,常用的main方法写法有2种,那种变态的使用16进制写的不算。

      main方法的一般写法:

     

 public static void main(String[] args) {
	      System.out.println("Main Method");
	 }

    另一种使用可变参数的写法:  

 

   

 public static void main(String... args) {
	      System.out.println("Main Method");
	  }

    一般人的想法是使用main(String[] args)或者main(String... args)正则匹配,但是java中可以把方法名写到不同的行上的。

   

public static void main (
			String...  args) {
		System.out.println("Main Method!");
	}

   String...后面的那个参数可以随便写不同的名字:

  

public static void main (
			String...  args2) {
		System.out.println("Main Method!");
	}

    应该使用main(String... [a-zA-Z0-9_])这类的匹配,匹配前还得去除多余的空格。

    下面介绍我写的去除main方法。

     我的思路是得到main函数的起始范围,去掉就OK了。同时也考虑了这种情况:

    

public static void main(String[]args,int len)
	{
		System.out.println("another Method!");
	}

    详情可以看代码,我就不一一解释了,代码写的不是很好,请见谅。

   

public class 删除Main方法 {
	public static void main(String[] args) throws Exception {
		删除Main方法 t = new 删除Main方法();
		String content = t.getFileContent("F:/saveFile/tmp/c/SimpleTest.java",
				"utf-8");
		String result = t.delMainMethod(content);
		t.writeStrToFile(result, "F:/saveFile/tmp/c/SimpleTest.java", "utf-8");
	}

	public String delMainMethod(String content) {
		int publicStart = -1, mainStart = -1;
		int checkStart = -1;
		String tmp = null, tmp2 = null;
		mainStart = content.lastIndexOf("main");
		String tmpContent = new String(content);
		// 得到真正的main方法
		while ((mainStart = tmpContent.lastIndexOf("main")) != -1) {
			tmp2 = new String(tmpContent.substring(mainStart));
			checkStart = tmp2.indexOf(")");
			tmp2 = new String(tmpContent.substring(mainStart - 1, mainStart
					+ checkStart + 1));
			tmp2 = tmp2.replaceAll("#_end_#", "\n");
			tmp2 = tmp2.replaceAll("\\n", "");
			tmp2 = tmp2.replaceAll("\\s+", "");
			if (tmp2.startsWith("main(String") && (tmp2.indexOf(",") == -1)) {
				break;
			}
			tmpContent = new String(tmpContent.substring(0, mainStart));
		}
		if (mainStart != -1) {
			tmp = new String(content.substring(0, mainStart));
			// 得到main方法的开始位置
			publicStart = tmp.lastIndexOf("public");
		}
		if (publicStart != -1) {
			tmp = new String(content.substring(mainStart));
		}
		if (tmp == null) {
			// 去掉多余空白行
			content = content.replaceAll("#_end_#", "\r\n");
			content = content.replaceAll("\\s{2,}\\r\\n", "\r\n");
			return content;
		}
		// 得到main方法的结束位置
		char[] tmpChar = tmp.toCharArray();
		int bracketStart = 0, bracketEnd = 0;
		for (int i = 0, len = tmpChar.length; i < len; i++) {
			if (tmpChar[i] == '{') {
				bracketStart++;
			} else if (tmpChar[i] == '}') {
				bracketEnd = i;
				bracketStart--;
			}
			if (i != 0 && bracketStart == 0 && bracketEnd != 0) {
				break;
			}
		}
		StringBuffer contentBuffer = new StringBuffer(5120);
		// 截取字符串
		contentBuffer.append(content.substring(0, publicStart)).append(
				content.substring(mainStart + bracketEnd + 1));
		content = null;
		content = contentBuffer.toString();
		// 去掉多余空白行
		content = content.replaceAll("#_end_#", "\r\n");
		content = content.replaceAll("\\s{2,}\\r\\n", "\r\n");
		return content;
	}

	public String getFileContent(String fileName, String chartSet)
			throws Exception {
		if (chartSet == null) {
			chartSet = "utf-8";
		}
		StringBuffer buffer = new StringBuffer(5120);
		String line = null;
		InputStream is = new FileInputStream(fileName);
		BufferedReader reader = new BufferedReader(new InputStreamReader(is,
				chartSet));
		while ((line = reader.readLine()) != null) {
			buffer.append(line).append("#_end_#");
		}
		return buffer.toString();
	}

	public void writeStrToFile(String str, String filePath, String charsetName)
			throws Exception {
		if (charsetName == null) {
			charsetName = "utf-8";
		}
		OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(
				filePath), charsetName);
		out.write(str);
		out.close();
	}
}

    测试文件如下:

   

public class SimpleTest {
	public void fun() {
		System.out.println("hello world");
	}

	public static void mainTest(String[] args) {
		System.out.println("another method");
	}

	public static void Tmain(String[] args) {
		System.out.println("another Method!");
	}
	
	private static void main()
	{
		System.out.println("another Method!");
	}
	
	private static void main(String[]args,int len)
	{
		System.out.println("another Method!");
	}
	
	public static void main (
			String...  args2) {
		System.out.println("Main Method!");
	}

	public static void main4Test(String ...args) {
		System.out.println("another method");
	}

	public void fun2() {
		System.out.println("hello world2");
	}

	public void main5Test() {
		System.out.println("another method");
	}

}

   处理结果为:

  

    测试文件:

   

public class SimpleTest {
	public void fun() {
		System.out.println("hello world");
	}

	public static void mainTest(String[] args) {
		System.out.println("another method");
	}

	public static void Tmain(String[] args) {
		System.out.println("another Method!");
	}
	
	public static void main()
	{
		System.out.println("another Method!");
	}
	
	public static void main(String[]args,int len)
	{
		System.out.println("another Method!");
	}
	
	public static void main (
			String...  args2) {
		System.out.println("Main Method!");
	}

	public static void main4Test(String ...args) {
		System.out.println("another method");
	}

	public void fun2() {
		System.out.println("hello world2");
	}

	public void main5Test() {
		System.out.println("another method");
	}

}

    处理结果为:

   

 

    如果没有main函数,处理结果为:

   

    有不同方法的,请留言,谢谢,我知道我这种方法是最笨的,欢迎各位指教。

    本文系原创,转载请注明出处,谢谢。

    全文完。

 

  • 大小: 113.7 KB
  • 大小: 28 KB
  • 大小: 103.6 KB
0
0
分享到:
评论

相关推荐

    java 强制删除使用中的文件

    在Java中,通常使用`java.io.File`类来操作文件,它的`delete()`方法用于删除文件。但当文件被其他进程占用时,`delete()`方法会返回`false`,表示删除失败。为了解决这个问题,我们可以采用以下策略: 1. **利用...

    java 删除文件夹内指定前缀名字的所有文件

    在Java编程语言中,删除文件或文件夹是一项常见的任务,特别是在进行文件系统操作时。这里我们将深入探讨如何在Java中删除文件夹内指定前缀名字的所有文件。首先,我们需要了解`java.io.File`类,它是Java标准库中的...

    java 删除指定目录下的文件

    在Java编程语言中,删除指定目录下的文件是一个常见的任务...总结来说,Java提供了多种方法来删除指定目录下的文件,可以根据项目需求和兼容性选择合适的方法。在进行文件系统操作时,务必小心谨慎,避免误删重要数据。

    Java用File模糊删除少量文件

    在Java编程中,删除文件是一项常见的操作,但有时我们可能需要根据特定条件,如文件名的部分内容,来实现“模糊删除”少量文件。这通常涉及到文件I/O操作和正则表达式的应用。以下是对这个主题的详细解释: 首先,...

    文件批量删除(java版)

    在Java编程中,批量删除文件是一项常见的操作,特别是在系统维护、数据清理或应用程序卸载时。这个主题主要涉及Java的I/O流和文件操作。以下是一些关于如何在Java中实现文件批量删除的关键知识点: 1. **Java.io....

    java操作共享文件

    Java提供了一些库来实现这一功能,其中之一就是jcifs库,它是一个开源的Java SMB(Server Message Block)客户端,使得Java程序能够方便地操作Windows网络共享文件。在本文中,我们将深入探讨如何使用jcifs库中的...

    利用JavaService给java文件开启服务

    JavaService是一个工具,它允许Java应用程序作为Windows服务运行。在Windows操作系统中,服务是一种在后台运行的程序,即使没有用户登录也可以启动和运行。通过将Java应用程序包装为服务,我们可以确保程序在系统...

    java递归实现删除文件夹

    在Java编程中,删除文件夹及其子文件夹通常涉及到递归操作,因为文件夹可能包含多个层级的子文件和子文件夹。递归是一种在函数内部调用自身的方法,用于解决具有相同结构的问题。以下是对Java中递归实现删除文件夹这...

    java 移动文件.

    在 Java 中,可以使用 File 类的 delete 方法来实现文件删除。例如: `File f = new File("c:\\Autoexec.bat");` `f.delete();` 四、文件夹操作 文件夹操作包括创建文件夹、删除文件夹等。在 Java 中,可以使用 ...

    JAVA删除文件的简单方法

    在Java编程语言中,删除文件或文件夹是一个常见的任务,特别是在清理临时文件、处理日志或者更新应用程序资源时。本文将详细介绍如何使用简单的递归方法来删除一个文件夹及其下的所有文件,仅需二十行左右的代码。...

    删除svn文件的java代码

    ### 删除SVN文件的Java代码知识点解析 #### 一、代码功能概述 本文将深入解析一个用于删除Subversion(简称SVN)版本控制系统中的`.svn`文件夹的Java程序。该程序通过递归的方式遍历指定目录下的所有子目录与文件,...

    java删除文件夹的代码

    在Java编程中,删除文件或文件夹是一项常见的操作。这里我们将深入探讨如何使用Java的`java.io...了解并熟练掌握这些基础知识对于Java开发者来说至关重要,因为它涉及到文件系统的操作,是很多应用程序的基础功能之一。

    java静态文件处理

    1. **使用内置容器**:例如Tomcat、Jetty等Java应用服务器都内置了对静态文件的支持。当请求到达服务器时,如果路径匹配到静态资源,服务器会直接返回该文件,而无需执行任何Java代码。配置Web应用的`web.xml`文件,...

    java ibatis main测试

    在Java中,`main` 方法是程序的入口点,任何Java应用程序都从`main`方法开始执行。当我们说"Java iBatis main测试"时,这意味着我们要在Java环境中,通过`main`方法来运行和测试iBatis的相关功能。下面我们将深入...

    Java多个文件根据URL下载后打包zip导出.zip

    Java的`java.io.File`类用于文件操作,如创建、读写和删除。`FileOutputStream`和`BufferedOutputStream`用于将网络获取的数据写入文件。如果下载的文件分布在不同的子目录下,我们需要创建相应的目录结构。 3. **...

    获取上传的文件行数的最快速的java代码

    标签“java文件操作”表明这是一个关于Java对文件进行I/O操作的问题。Java提供了丰富的类库支持文件的创建、读写、删除等操作,如`java.io.File`,`java.nio.file.Files`,以及用于处理流的`java.io`包中的类。 ...

    Java\文件的删去.txt

    导入了`java.io.File`包,这是Java中用于文件操作的核心类之一。 2. **定义类及主方法**: ```java public class AdvanceFileDemo { public static void main(String[] args) { File f = new File("e:\\Book")...

    Java实现MinIO文件服务器

    通过上述步骤,开发者可以轻松地在Java应用中集成MinIO,实现文件的上传、下载、管理等功能,同时享受到MinIO提供的高性能和安全性。在实际项目中,你可以根据具体需求对这些基础操作进行扩展和定制,构建出符合业务...

    java_io.rar_java 文件操作_java 读取 本地文件_java.io转动_文件操作

    在Java编程语言中,文件操作是程序开发中的基础部分,特别是在处理输入/输出(I/O)时。本资源“java_io.rar”提供了关于如何在Java中进行...通过理解和熟练运用这些类和方法,开发者可以构建出强大的文件处理应用程序。

    Java操作FastDFS文件上传

    删除文件则使用`delete_file`方法,更新文件则调用`update_file`。需要注意的是,FastDFS不支持文件的部分更新,更新文件时会重新上传整个文件。 在实际应用中,我们可能需要对文件上传过程进行异常处理和日志记录...

Global site tag (gtag.js) - Google Analytics