zoukankan      html  css  js  c++  java
  • 使用正则表达式将JSP中文本标签抽取出来填到PropertyFile中

    在java前台程序的开发过程中,经常要把大量JSP中的文本key抽取出来,放到Property文件中,非常麻烦,于是写了这么一个工具。 

    这个程序在JSP文件中查找"jsp.xxxxxx"这样的字符串(一行上如果有多个这样的字符串也能找出来),然后填充到一个HashMap中(利用这个字符串做key,这样避免我们过滤出来的字符串有duplicated的问题),最后写到Property文件中,接下来只需要到Property文件中填写value就可以了。 

    同样的,对于java文件,也会查找action.xxx, form.xxx, bean.xxx等这样的字符串,然后抽取出来。 

    所以说,本工具最关键的地方就是那两个正则表达式。:) 

    代码使用了Jakarta的ORO正则表达式库,参考了之前发的一篇来自IBM DeveloperWorks的文章。 

    目前已经修正了不少bug,这个工具已经可以用了,实用效果很不错。 


    /*
    * GenerateProperties.java
    */

    package cn.com.jointforce.common;

    import org.apache.oro.text.regex.*;
    import java.io.*;
    import java.util.*;

    /**
    *
    @author Eric
    */
    public class GenerateProperties {
        
    /**
         * Creates a new instance of GenerateProperties
         
    */
        
    public GenerateProperties() {
        }
        
        
    //============================================================== Definition BEGIN ===================================================================================================//
        
        
    // jsp file reside directory path
        private String jsp_directory = "D:\\JointForce\\S.EasyCluster-2.0\\InterfaceSrc\\easycluster\\web\\admin\\jsp";
        
        
    // java file reside directory path
        private String java_directory = "D:\\JointForce\\S.EasyCluster-2.0\\InterfaceSrc\\easycluster\\src\\cn\\com\\jointforce\\admin";
        
        
    // root module property file
        private String root_property_file = "D:\\JointForce\\S.EasyCluster-2.0\\InterfaceSrc\\easycluster\\src\\cn\\com\\jointforce\\root\\resource\\ApplicationResource.properties";
        
        
    // portal module property file
        private String portal_property_file = "D:\\JointForce\\S.EasyCluster-2.0\\InterfaceSrc\\easycluster\\src\\cn\\com\\jointforce\\portal\\resource\\ApplicationResource.properties";
        
        
    // admin module property file
        private String admin_property_file = "D:\\JointForce\\S.EasyCluster-2.0\\InterfaceSrc\\easycluster\\src\\cn\\com\\jointforce\\admin\\resource\\ApplicationResource.properties";
        
        
    // distill resources from jsp, default output property file
        private String default_property_file = "portal";  // portal or admin or root
        
        
    // recursive jsp directory?
        private boolean recursive_jsp_directory = true;
        
        
    // recursive java directory
        private boolean recursive_java_directory = true;
        
        
    // jsp filter Regular String
        String jsp_restring = "['\"](jsp|error)\\.[^'\"]+['\"]";
        
        
    // java filter Regular String
        String java_restring = "['\"](action|bean|error|form)\\.[^'\"]+['\"]";
        
        
    // All filenames container
        private ArrayList fileContainer = new ArrayList();
        
        
    // root properties container
        private Properties root_props = new Properties();
        
        
    // portal properties container
        private Properties portal_props = new Properties();
        
        
    // admin properties container
        private Properties admin_props = new Properties();
                
        
    //============================================================== Definition END ===================================================================================================//
        
        
    /**
         * Set default property files
         
    */
        
    public void SetDefaultOutputProperty(String value) {
            default_property_file 
    = value;
        }
        
        
    /**
         * List files function, using recursion
         
    */
        
    private void searchFiles(String dir, String jsp_or_java) {
                    
            File root 
    = new File(dir);
            File[] file_array 
    = root.listFiles();
            
            
    for (int i=0; i<file_array.length; i++) {
                
    if (file_array[i].isDirectory()) {
                    
    if (jsp_or_java.equalsIgnoreCase("jsp")) {
                        
    if (recursive_jsp_directory) {
                            searchFiles(file_array[i].getAbsolutePath(), jsp_or_java);
                        }
                    } 
    else if (jsp_or_java.equalsIgnoreCase("java")) {
                        
    if (recursive_java_directory) {
                            searchFiles(file_array[i].getAbsolutePath(), jsp_or_java);
                        }
                    }
                } 
    else {
                    fileContainer.add(file_array[i].getAbsolutePath());
                }
            }
        }
        
        
    /**
         * Load root, portal, admin current properties
         
    */
        
    private void LoadProperties() {
            InputStream root_is 
    = null;
            InputStream portal_is 
    = null;
            InputStream admin_is 
    = null;
            
            
    try {
                
    // Looking for properties file
                root_is = new FileInputStream(root_property_file);
                portal_is 
    = new FileInputStream(portal_property_file);
                admin_is 
    = new FileInputStream(admin_property_file);
            
                
    if (root_is != null) {
                    root_props.load(root_is);
                }
                
    if (portal_is != null) {
                    portal_props.load(portal_is);
                }
                
    if (admin_is != null) {
                    admin_props.load(admin_is);
                }
            } 
    catch (IOException e) {
                e.printStackTrace();
            } 
    finally {
                
    try {
                    
    if (root_is != null)
                        root_is.close();
                    
    if (admin_is != null)
                        admin_is.close();
                    
    if (portal_is != null)
                        portal_is.close();
                } 
    catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        
        
    /**
         * Process JSP files
         
    */
        
    public void DistillJSP() {
            fileContainer.clear();
            
            
    // Get all filenames under JSP directory
            searchFiles(jsp_directory, "jsp");
            
            
    // Load root, portal, admin current properties
            LoadProperties();
            
            
    try {
                
    // Prepare the Writers
                FileWriter root_props_writer = new FileWriter(root_property_file, true);
                BufferedWriter root_props_bufwriter 
    = new BufferedWriter(root_props_writer);
                FileWriter portal_props_writer 
    = new FileWriter(portal_property_file, true);
                BufferedWriter portal_props_bufwriter 
    = new BufferedWriter(portal_props_writer);
                FileWriter admin_props_writer 
    = new FileWriter(admin_property_file, true);
                BufferedWriter admin_props_bufwriter 
    = new BufferedWriter(admin_props_writer);
            
                
    // Iterate the files
                int file_number = fileContainer.size();
                
    // The result string container
                HashMap result_container = new HashMap();
                
                
    for (int i=0; i<file_number; i++) {
                    
    // Ignore files don't end with `jsp'
                    String filename = (String)fileContainer.get(i);
                    
    if (filename == null || filename.trim().length() < 1 ||
                        
    !filename.substring(filename.length() - 3, filename.length()).equalsIgnoreCase("jsp")) {
                        
    continue;
                    }
                    
                    
    // Open the JSP File and read out the resources
                    FileReader jsp_file_reader = new FileReader(filename);
                    BufferedReader buffer_reader 
    = new BufferedReader(jsp_file_reader);
                    String input_line 
    = null;
                    
                    PatternCompiler orocom 
    = new Perl5Compiler();
                    Pattern pattern 
    = orocom.compile(jsp_restring);
                    PatternMatcher matcher 
    = new Perl5Matcher();
                    
                    
    while((input_line = buffer_reader.readLine()) != null) {
                        
    // System.out.println("Got one line from jsp file: " + input_line);
                        
                        
    // Begin filter
                        
    // Use PatternMatcherInput class, we can find the next string in one line string
                        
    // Otherwise ORO will find the first match string in one line then ignore the rest string of this line
                        PatternMatcherInput reinput = new PatternMatcherInput(input_line);
                        
    while (matcher.contains(reinput, pattern)) {
                            MatchResult result 
    = matcher.getMatch();
                            String result_string 
    = result.group(0);
                            
                            
    // Get rid of the quotations
                            result_string = result_string.substring(1, result_string.length() - 1);
                            
    // if we got the duplicated result_string, HashMap will overcome this issue
                            result_container.put(result_string, "dummy object");
                        }
                    }
                    
                    buffer_reader.close();
                    jsp_file_reader.close();
                }
                
                
    // Iterate the HashMap and write the result
                Iterator it = result_container.keySet().iterator();
                
    while (it.hasNext()) {
                    String key 
    = (String)it.next();
                    
                    
    if (default_property_file.equalsIgnoreCase("portal")) {
                        
    // check whether this key has been added?
                        if (portal_props.getProperty(key) == null) {
                            System.out.println(
    "Found one resource: " + key);
                            portal_props_bufwriter.newLine();
                            portal_props_bufwriter.write(key 
    + "=dummy");
                            portal_props_bufwriter.newLine();
                        }
                    } 
    else if (default_property_file.equalsIgnoreCase("admin")) {
                        
    // check whether this key has been added?
                        if (admin_props.getProperty(key) == null) {
                            System.out.println(
    "Found one resource: " + key);
                            admin_props_bufwriter.newLine();
                            admin_props_bufwriter.write(key 
    + "=dummy");
                            admin_props_bufwriter.newLine();
                        }
                    } 
    else if (default_property_file.equalsIgnoreCase("root")) {
                        
    // check whether this key has been added?
                        if (root_props.getProperty(key) == null) {
                            System.out.println(
    "Found one resource: " + key);
                            root_props_bufwriter.newLine();
                            root_props_bufwriter.write(key 
    + "=dummy");
                            root_props_bufwriter.newLine();
                        }
                    }
                }
        
                root_props_bufwriter.close();
                root_props_writer.close();
                admin_props_bufwriter.close();
                admin_props_writer.close();
                portal_props_bufwriter.close();
                portal_props_writer.close();
            } 
    catch (Exception e) {
                e.printStackTrace();
            }
        }
        
        
    /**
         * Process JAVA Files
         
    */
        
    public void DistillJava() {
            fileContainer.clear();
            
            
    // Get all filenames under Java directory
            searchFiles(java_directory, "java");
            
            
    // Load root, portal, admin current properties
            LoadProperties();
            
            
    try {
                
    // Prepare the Writers
                FileWriter root_props_writer = new FileWriter(root_property_file, true);
                BufferedWriter root_props_bufwriter 
    = new BufferedWriter(root_props_writer);
                FileWriter portal_props_writer 
    = new FileWriter(portal_property_file, true);
                BufferedWriter portal_props_bufwriter 
    = new BufferedWriter(portal_props_writer);
                FileWriter admin_props_writer 
    = new FileWriter(admin_property_file, true);
                BufferedWriter admin_props_bufwriter 
    = new BufferedWriter(admin_props_writer);
            
                
    // Iterate the files
                int file_number = fileContainer.size();
                
    // The result string container
                HashMap result_container = new HashMap();
                
                
    for (int i=0; i<file_number; i++) {
                    
    // Ignore files don't end with `java'
                    String filename = (String)fileContainer.get(i);
                    
    if (filename == null || filename.trim().length() < 1 ||
                        
    !filename.substring(filename.length() - 4, filename.length()).equalsIgnoreCase("java")) {
                        
    continue;
                    }
                    
                    
    // Open the Java File and read out the resources
                    FileReader java_file_reader = new FileReader(filename);
                    BufferedReader buffer_reader 
    = new BufferedReader(java_file_reader);
                    String input_line 
    = null;
                    
                    PatternCompiler orocom 
    = new Perl5Compiler();
                    Pattern pattern 
    = orocom.compile(java_restring);
                    PatternMatcher matcher 
    = new Perl5Matcher();
                    
                    
    while((input_line = buffer_reader.readLine()) != null) {
                        
    // System.out.println("Got one line from java file: " + input_line);
                        
                        
    // Begin filter
                        
    // Use PatternMatcherInput class, we can find the next string in one line string
                        
    // Otherwise ORO will find the first match string in one line then ignore the rest string of this line
                        PatternMatcherInput reinput = new PatternMatcherInput(input_line);
                        
    while (matcher.contains(reinput, pattern)) {
                            MatchResult result 
    = matcher.getMatch();
                            String result_string 
    = result.group(0);
                            
                            
    // Get rid of the quotations
                            result_string = result_string.substring(1, result_string.length() - 1);
                            
    // if we got the duplicated result_string, HashMap will overcome this issue
                            result_container.put(result_string, "dummy object");
                        }
                    }
                    
                    buffer_reader.close();
                    java_file_reader.close();
                }
                    
                
    // Iterate the HashMap and write the result
                Iterator it = result_container.keySet().iterator();
                
    while (it.hasNext()) {
                    String key 
    = (String)it.next();
                    
                    
    if (default_property_file.equalsIgnoreCase("portal")) {
                        
    // check whether this key has been added?
                        if (portal_props.getProperty(key) == null) {
                            System.out.println(
    "Found one resource: " + key);
                            portal_props_bufwriter.newLine();
                            portal_props_bufwriter.write(key 
    + "=dummy");
                            portal_props_bufwriter.newLine();
                        }
                    } 
    else if (default_property_file.equalsIgnoreCase("admin")) {
                        
    // check whether this key has been added?
                        if (admin_props.getProperty(key) == null) {
                            System.out.println(
    "Found one resource: " + key);
                            admin_props_bufwriter.newLine();
                            admin_props_bufwriter.write(key 
    + "=dummy");
                            admin_props_bufwriter.newLine();
                        }
                    } 
    else if (default_property_file.equalsIgnoreCase("root")) {
                        
    // check whether this key has been added?
                        if (root_props.getProperty(key) == null) {
                            System.out.println(
    "Found one resource: " + key);
                            root_props_bufwriter.newLine();
                            root_props_bufwriter.write(key 
    + "=dummy");
                            root_props_bufwriter.newLine();
                        }
                    }
                }
                                
                root_props_bufwriter.close();
                root_props_writer.close();
                admin_props_bufwriter.close();
                admin_props_writer.close();
                portal_props_bufwriter.close();
                portal_props_writer.close();
            } 
    catch (Exception e) {
                e.printStackTrace();
            }
        }
        
        
        
    /**
         * 
    @param args the command line arguments
         
    */
        
    public static void main(String[] args) {
            GenerateProperties handle 
    = new GenerateProperties();
            handle.SetDefaultOutputProperty(
    "admin");
            handle.DistillJSP();
            handle.DistillJava();
        }
        
    }
  • 相关阅读:
    边框大小 | box-sizing (Basic User Interface)
    边框图片 | border-image (Backgrounds & Borders)
    边框图像重复 | border-image-repeat (Backgrounds & Borders)
    边框图像路径 | border-image-source (Backgrounds & Borders)
    边框图像开始 | border-image-outset (Backgrounds & Borders)
    边框图像宽度 | border-image-width (Backgrounds & Borders)
    边框图像使用范围 | border-image-slice (Backgrounds & Borders)
    边框右上角半径 | border-top-right-radius (Backgrounds & Borders)
    边框半径 | border-radius (Backgrounds & Borders)
    边框 | border (Backgrounds & Borders)
  • 原文地址:https://www.cnblogs.com/super119/p/1924540.html
Copyright © 2011-2022 走看看