`

批量在java程序的前面加入包名

阅读更多
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

import FrequentlyUsedClasses.FileList;

public class AddPackageString {
	static ArrayList<File>  fileList = new ArrayList<File>();
	public static void main(String[] args) {
		File file = new File("D:/DSHWorkSpace/msb/classes/io");
		System.out.println(getAvailablePath(file));
		getFiles("D:/DSHWorkSpace/msb/src");
		getFiles("D:/DSHWorkSpace/ThinkInJava/src");
		for(File fileT:fileList){
			System.out.println(getPackageName(fileT, "src"));
		}
		//copyFileAndAddPackageName(new File("d:\\Noname1.java"));
	}
	/**
	 * @return
	 */
	private static String getAvailablePath(File file){
		return file.getPath().replace('\\', '/');
	}
	/**
	 * @param file
	 * @param root
	 * @return
	 */
	private static String getPackageName(File file,String root){
		int indexOfPackageName = file.getParent().indexOf(root)+root.length()+1;
		String packageName = file.getParent().substring(indexOfPackageName);
		packageName = packageName.replace('\\', '.');
		return packageName;
	}
	/**
	 * 返回某个文件夹下所有的文件
	 * @return
	 */
	public static void getFiles(String path){
		File file = new File(path);
		File[] files = file.listFiles();
		if(files==null){
			return ;
		}
		else{
			for (int i = 0; i < files.length; i++) {
				if(files[i].isDirectory()){
					System.out.println(getAvailablePath(files[i]));
					getFiles(getAvailablePath(files[i]));
				}else if(files[i].getName().lastIndexOf(".java")!=-1)
					//copyFileAndAddPackageName(files[i]);
					fileList.add(files[i]);
					System.out.println(files[i].getAbsolutePath().replace('\\', '/'));
			}
		}
	}
	/**把源文件复制到d:/temp.java中 然后加入package 复制回来
	 * @param file
	 */
	public static void copyFileAndAddPackageName(File file){
		try {
			int b;
			int replaceCounter=0;
			int importStringCounter=0;
			String packageName = getPackageName(file, "src");
			File fileTemp = new File("d:/temp.java");
			FileReader fr = new FileReader(file);
			FileWriter fw = new FileWriter(fileTemp);
			fw.write("package "+packageName+";");
			while((b = fr.read())!=-1){
				fw.write(b);
			}
			fr.close();
			fw.close();
			FileReader fr2 = new FileReader(fileTemp);
			FileWriter fw2 = new FileWriter(file);
			BufferedReader br = new BufferedReader(fr2);
			BufferedWriter bw = new BufferedWriter(fw2);
			String s;
			while((s = br.readLine())!=null){
				System.out.println(s);
				int packageIndex = s.lastIndexOf("package ");
				if(packageIndex!=-1&&importStringCounter==0){
					s = s.substring(packageIndex);
					s= s.substring(s.indexOf(";")+1);
					
					if(replaceCounter==0){
						s = "package "+packageName+"; "+s.trim();
						replaceCounter++;
					}
				}
				
				if(!s.trim().equals(""))
				{
					if(s.indexOf("import ")!=-1)
						importStringCounter++;
					bw.write(s);
					bw.write("\r");
				}
			}
			bw.close();
			br.close();
			fw2.close();
			fr2.close();
			
			
			
		} catch (Exception e) {
			// TODO: handle exception
		}
		
	}
	
}

 

分享到:
评论

相关推荐

    jsr80 java 访问 usb

    这两个项目也都开始试图向其他操作系统上的 Java 应用程序提供对 USB 设备的访问,尽管它们都还没有开发出可以使用的包(参阅 参考资料 中有关本文中讨论的这两个项目及其他项目的资料)。 在本文中,将对 jUSB 和 JSR...

    疯狂JAVA讲义

    学生提问:当我们使用编译C程序时,不仅需要指定存放目标文件的位置,也需要指定目标文件的文件名,这里使用javac编译Java程序时怎么不需要指定目标文件的文件名呢? 13 1.5.3 运行Java程序 14 1.5.4 根据...

    XP下的环境变量。

    这些环境变量对Java开发者至关重要,因为它们告诉操作系统如何找到Java开发工具(如JDK)的位置,以便能够执行Java程序、编译Java源代码以及运行Java应用程序。下面将详细介绍在XP系统下设置Java环境变量的步骤和...

    Editplus 3[1].0

    2. 单击“添加”按钮,命名,在“扩展名”部分输入对应扩展名(不带“.”) 3. 浏览/输入 STX(语法文件部分) 以及 ACP(自动完成文件部分)。 添加剪辑库文件(*.CTL) 复制相应 *.CTL 文件到软件安装目录,重新...

    DWR.xml配置文件说明书(含源码)

    这有点向java中的import语句,多数类在使用之前需要引入,但引入了类并不意味着这些在使用,每个creator和converter需要有个id属性来允许以后进行引用. 配置文件的allow部分定义哪些类可以建立和转换,每个被准许的类都...

    editplus 代码编辑器html c++ jsp css

    2. 单击“添加”按钮,命名,在“扩展名”部分输入对应扩展名(不带“.”) 3. 浏览/输入 STX(语法文件部分) 以及 ACP(自动完成文件部分)。 添加剪辑库文件(*.CTL) 复制相应 *.CTL 文件到软件安装目录,重新...

    EditPlus 2整理信箱的工具

    2. 单击“添加”按钮,命名,在“扩展名”部分输入对应扩展名(不带“.”) 3. 浏览/输入 STX(语法文件部分) 以及 ACP(自动完成文件部分)。 添加剪辑库文件(*.CTL) 复制相应 *.CTL 文件到软件安装目录,重新...

    MySql规范(系列一)

    2. **避免批量更新生产数据**:批量更新操作可能会影响到其他依赖该数据的应用,应该在测试环境中测试无误后再执行。 3. **修改数据之前必须有备份习惯**:防止意外情况导致数据丢失。 4. **业务需要修改生产数据**...

    idea 使用快捷键.docx

    支持不同文件类型的注释符号,例如在Java中使用 `//` 或 `/* */`。 - **Ctrl+[**: 移动光标到当前所在代码的花括号开始位置。 - **Ctrl+]**: 移动光标到当前所在代码的花括号结束位置。 #### 版本控制 - **Ctrl+K**...

    Berkeley_DB_参考手册

    - **应用领域**:适用于需要高效数据存储与检索的应用程序。 - **API 接口**:支持多种编程语言如 C、C++、Java、Perl、Tcl、Python 和 PHP。 #### 2. Cursor API - **1.1 Introduction** - **定义**:游标...

Global site tag (gtag.js) - Google Analytics