如何在另一个 class 中调用一个 class 的 main() 方法?

How do I invoke a main() method of one class in another class?

如何在另一个 class 中调用一个 class 的 main() 方法?我有两个 classes SaveDataDynamicTest。两个 classes 都包含一个 main() 方法。我想运行我的主要在DynamicTestclass。如何正确调用 SaveData?

public class SaveData {

    private static final Map<String, Object> myCachedTreeMap = new TreeMap<String, Object>();


    public static final List<String> getLines(final String resourceParam, final Charset charset) throws IOException{
        System.out.println("Please get: "+resourceParam);
        if (myCachedTreeMap.containsKey(resourceParam) ) {
            // Use the cached file, to prevent an additional read.
            System.out.println("Found in memory : "+resourceParam);

        }   
        else {
            // Load the file from disk
            System.out.println("Not Found in memory : "+resourceParam);
        }

        return null;


    }


    public static void main(String[] args) throws IOException {
        String target_dir = "C:\myfiles\config\en";
        String output = "C:\myfiles\config\en\output.txt";
        File dir = new File(target_dir);
        File[] files = dir.listFiles();

        if (files == null || files.length < 1) {
            System.out.println("File list is empty...");
            return;
        }

        // open the Printwriter
        PrintWriter outputStream = new PrintWriter(output);

        try {

            for (File textFile : files) {
                if (textFile.isFile() && textFile.getName().endsWith(".txt")) {
                    readFromDisk(textFile);                 
                }
            }
        }
        finally {
            outputStream.close();
        }
        String fileNameFromCache = "en_synonyms.txt";
        Object Sheet1 = myCachedTreeMap.get(fileNameFromCache);
        System.out.println(fileNameFromCache + " : \n" + Sheet1);
    }

    @SuppressWarnings("resource")
    private static void readFromDisk(File textFile) throws FileNotFoundException, IOException {

        BufferedReader inputStream;
        inputStream = null;
        String content = "";
        try {
            inputStream = new BufferedReader(new FileReader(textFile));
            content = readFile(textFile);
            System.out.println("Bytes Read = "+content.length());
            // Save contents
            FileContentsObject Sheet1 = new FileContentsObject(System.currentTimeMillis(),
                    textFile.lastModified(), content,
                    textFile.getName(),
                    getLines(null, null));
            // add to map
            myCachedTreeMap.put(textFile.getName(), Sheet1);
        }
        finally {
            if (inputStream != null) {
                inputStream.close();
            }
        }
    }


    private static String readFile(File f) throws FileNotFoundException, IOException, UnsupportedEncodingException  {
        StringBuilder text = new StringBuilder(1024);
        int read, N = 1024 * 1024;
        char[] buffer = new char[N];


            BufferedReader br = null;
            try {
                br = new BufferedReader(
                                new InputStreamReader(
                                new FileInputStream(f), "UTF8"));


                while(true) {
                    read = br.read(buffer, 0, N);
                    if (read > 0)
                        text.append(new String(buffer, 0, read));

                    if(read < N) {
                        break;
                    }
                }
            }
            finally {
                if (br != null)
                    br.close();
            }

        return text.toString();
    }   


    private static final class FileContentsObject {
        private long cachedTime; // currentTime
        private long lastModifiedTimestamp;
        private String contents;
        List<String> lines;
        private String fileName;

        public FileContentsObject(long cachedTime, long lastModifiedTimestamp,
                String contents, String fileName, List<String> lines) {
            this.cachedTime = cachedTime;
            this.lastModifiedTimestamp = lastModifiedTimestamp;
            this.contents = contents;
            this.fileName = fileName;
            this.lines = lines;
            SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yy HH:mm:ss");


            System.out.println("Current Time & Date:" + sdf.format(cachedTime));

            System.out.println("Last Modified Time Stamp:"
                    + sdf.format(lastModifiedTimestamp));

        }
        /**
         * 
         * @return The lines from the file
         */
        List<String> getLines() {
            return this.lines;
        }
        public String toString() {
            return "Sheet1{" + "fileName='" + fileName + '\'' + ", contents='"
                    + contents + '\'' + ", lastModifiedTimestamp="
                    + lastModifiedTimestamp + ", CurrentTime&Date="
                    + cachedTime + '}';



        }
    }
}

public class DynamicTest {

    public static void main(String[] args) {
        Charset charset = Charset.forName("UTF-8");



        try {
            List<String> lines = CacheData.getLines("en_synonyms", charset) ;
            if (lines != null) {
                System.out.println("Number of Lines: "+lines.size());
                for (String line:lines) {
                    System.out.println("DynamicTest:: "+line);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();



        }



        try {
            List<String> lines = CacheData.getLines("en_stopwords", charset) ;
            if (lines != null) {
                System.out.println("Number of Lines: "+lines.size());
                for (String line:lines) {
                    System.out.println("DynamicTest:: "+line);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();



        }


    }

}

您可以像调用任何其他静态方法一样调用它:

SaveData.main (args); // it's up to you whether to pass the same args or
                      // different args

DynamicTest的main方法中写这个SaveData.main(args);

静态方法调用:

Class.method();

非静态方法调用:

Class object = new Class();
object.method();

Main declaration is always static 所以你必须像其他 static 方法一样调用它,在你的情况下:

SaveData.main (args);