1. 程式人生 > >講Java專案打包成jar(我使用的idea),在製作bat指令碼訪問,可以外部傳遞引數

講Java專案打包成jar(我使用的idea),在製作bat指令碼訪問,可以外部傳遞引數

先記錄一個工具類,該類是將大文字檔案分割,可以外部指定分割檔案的大小

SplitFile.Java
package com.tencent.splitlarge.file;

import java.io.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class SplitFile {

    public static void readFileByLines(String fileReadName,List<Integer> list) {
        if(list == null || list.size() < 1){
            throw new RuntimeException("輸入的引數不正確");
        }
        String filePath = null;
        if(fileReadName.contains("/")){
            filePath = fileReadName.substring(0,fileReadName.lastIndexOf("/")+1);
        }
        if(fileReadName.contains("\\")){
            filePath = fileReadName.substring(0,fileReadName.lastIndexOf("\\")+1);
        }

        //需要切分的檔案份數
       int size =  list.size();
        BufferedReader reader = null;

        long count = 0;
        String fileName = filePath + getDateString() + "_";
            //1-20,21 - 51,

        try {
            FileWriter writer = new FileWriter(fileName + 1 + ".txt", true);
            reader = new BufferedReader(new FileReader(fileReadName));
            String lineTxt = null;
            while ((lineTxt = reader.readLine()) != null) {
                count ++;
                writer.write(lineTxt);
                writer.write("\r\n");
                if(size > 1 && count >= list.get(0)){
                    writer.close();
                    writer = new FileWriter(fileName + 2 + ".txt", true);
                }
                if(size > 2 && count >= list.get(1) + list.get(0)){
                    writer.close();
                    writer = new FileWriter(fileName + 3 + ".txt", true);
                }
                if(size > 3 && count >= list.get(2) + list.get(1) + list.get(0)){
                    writer.close();
                    writer = new FileWriter(fileName + 4 + ".txt", true);
                }
                if(size > 4 && count >= list.get(3) + list.get(2) + list.get(1) + list.get(0)){
                    writer.close();
                    writer = new FileWriter(fileName + 5 + ".txt", true);
                }
            }
            writer.close();
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e1) {
                }
            }

        }
    }

    private static  String getDateString(){
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
        return dateFormat.format(new Date());
    }


    public static void main(String[] args) {
        String filePath = "D:\\test\\yy.txt";
        ArrayList<Integer> list = new ArrayList<>();
        list.add(100000);
        list.add(100000);
        list.add(100000);
        list.add(100000);
        list.add(100000);
        readFileByLines(filePath,list);

    }

}

 

在idea上點選file

開啟專案結構:

選擇Artifacts,點選+新增一個

 

按圖中選擇點選

選擇main主類,指定啟動類,按圖中選擇,將MANIFEST.MR檔案的路徑由java改為resources目錄下面

 

選擇main啟動類

我的啟動類如下,這個類,定義了一些由外部輸入的引數,使用scanner來獲取

package com.tencent.splitlarge.file;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;

public class ApplicationMain {

    public static void main(String[]args){
        if(args.length <= 0 ){
            scannerInput();
        }
        killProcess();
    }

    private static void killProcess() {
        Runtime rt = Runtime.getRuntime();
        Process p = null;
        try {
            rt.exec("cmd.exe /C start wmic process where name='cmd.exe' call terminate");
            System.exit(0);
            System.out.println("退出成功!");
        } catch (IOException e) {
            System.out.println("退出失敗!");
        }
    }

    private static void scannerInput() {
        Scanner scanner = new Scanner(System.in);
        while (true){
            System.out.print("請輸入需要分割檔案的路徑(輸入exit為退出):");
            String filePath = scanner.nextLine();
            if(filePath.equals("exit")){
                killProcess();
            }
            ArrayList<Integer> list = new ArrayList<>();
            System.out.println("請輸入需要分割檔案的大小,使用逗號隔開");
            String countString = scanner.nextLine();
            String[] split = countString.split(",");
            for (String s : split) {
                int count = Integer.parseInt(s);
                list.add(count);
            }
            try {
                    SplitFile.readFileByLines(filePath,list);
                    System.out.println("分割成功,生成檔案和父檔案目錄同級.");
                } catch (Exception e) {
                    System.out.println("分割檔案失敗!");
                }
        }
    }

}

選擇本工程名稱的jar,右鍵,新建一個directory,取名稱為libs

將專案中上面出現的所有的jar全部拖拽帶libs目錄中去

完成之後的效果如下

再點選apply和ok,儲存

 

選擇途中的點選

出現下圖,點選rebuild,就生成了jar了

生成jar的位置在該專案的out資料夾中,生成的MANIFEST.MR檔案在resources目錄下

 

 

 

將jar檔案copy出來,放在任意資料夾中,在同級目錄下,新建.bat結尾的檔案,名稱任意

 

在新建的bat檔案,寫入下面的內容

splitlarge.jar 為你生成的jar的名稱

java -jar splitlarge.jar 
pause 

以上都完成之後,直接雙擊bat指令碼檔案

就運行了你生成的jar,輸入引數,就可以執行你的程式碼了