講Java專案打包成jar(我使用的idea),在製作bat指令碼訪問,可以外部傳遞引數
阿新 • • 發佈:2018-11-12
先記錄一個工具類,該類是將大文字檔案分割,可以外部指定分割檔案的大小
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,輸入引數,就可以執行你的程式碼了