首页 > 编程语言 >java执行jar maven指定mian 方法

java执行jar maven指定mian 方法

时间:2023-07-15 11:56:46浏览次数:44  
标签:java String io mian jar File new import

pom文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>excelutil</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.17</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.17</version>
        </dependency>

        <dependency>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.1.0</version>
        </dependency>


    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>

            </plugin>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <appendAssemblyId>false</appendAssemblyId>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <!-- 此处指定main方法入口的class -->
                            <mainClass>com.xie.ExcelUtil</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>assembly</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>



</project>

java代码:

查看代码
 package com.xie;

import org.apache.commons.io.FileUtils;
import org.apache.poi.ss.usermodel.*;

import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class ExcelUtil {

    //java -classpath \path_to_jars\*.jar excelutil-1.0-SNAPSHOT.jar com.xie.ExcelUtil

    public static void main(String[] args) {

        String parentPath =  args[0]; // 运行时指定参数  总文件路径
        String savePhonePath =  args[1]; // 运行时指定参数  保存路径
        String savePhonePathDistinct =  args[2]; // 运行时指定参数  去重后保存路径

        List<Path> fileNames = null;
        try (Stream<Path> paths = Files.walk(Paths.get(parentPath))){
            fileNames = paths.filter(Files::isRegularFile).collect(Collectors.toList());
            fileNames.forEach(path -> insertInfo(path.toString(), savePhonePath));
            System.out.println("写入完成。。。。。。。");
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 去重
        if (null != fileNames && fileNames.size() > 0) {
            int splitSize = fileNames.size() * 5;
            File[] files = DistinctFileUtil.splitFile(savePhonePath, splitSize);
            DistinctFileUtil.distinct(files, savePhonePathDistinct, splitSize);

            File savePhoneFile = new File(savePhonePath);
            savePhoneFile.delete();
        }

    }

    public static void insertInfo(String excelPath, String savePhonePath) {
        Set<String> phoneStrSet = new LinkedHashSet<>();
        try (FileInputStream fis = new FileInputStream(new File(excelPath));
             Workbook workbook = WorkbookFactory.create(fis)) {
            Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作表
            for (Row row : sheet) {
                if (row.getRowNum() < 3) {
                    continue;
                }
                Cell wCell = row.getCell(22); // "W"列
                Cell xCell = row.getCell(23); // "X"列
                if (wCell != null && xCell != null) {
                    String wValue = wCell.getStringCellValue();
                    String xValue = xCell.getStringCellValue();

                    if (null != wValue && !"".equals(wValue.trim())) {
                        String[] split = wValue.split(";");
                        phoneStrSet.addAll(Arrays.asList(split));
                    }

                    if (null != xValue && !"".equals(xValue.trim())) {
                        String[] split = xValue.split(";");
                        phoneStrSet.addAll(Arrays.asList(split));
                    }
                }
            }
            insertInfo(phoneStrSet, savePhonePath);
        } catch (Exception e) {
            //e.printStackTrace();
        }
    }

    public final static boolean isNumeric(String str) {
        if (null != str && !"".equals(str.trim())) {
            return str.matches("^1[0-9]{10}$");
        } else {
            return false;
        }
    }

    public static void insertInfo(Set<String> phoneStrSet, String savePhonePath) throws IOException {
        File f = new File(savePhonePath);
        if (!f.exists()) {
            f.createNewFile();// 不存在则创建
        }
        System.out.println("写入中。。。。。。。");
        BufferedWriter output = new BufferedWriter(new FileWriter(f,true));//true,则追加写入text文本
        phoneStrSet.forEach(phoneStr -> {
            try {
                if (isNumeric(phoneStr)) {
                    output.write(phoneStr + "\r\n");
                }
            } catch (IOException e) {
                //e.printStackTrace();
            }
        });
        output.flush();
        output.close();
    }
}
查看代码
 package com.xie;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashSet;
import java.util.Set;

public class DistinctFileUtil {

    /**
     * 将文件hash取模之后放到不同的小文件中
     * @param targetFile 要去重的文件路径
     * @param splitSize 将目标文件切割成多少份hash取模的小文件个数
     * @return
     */
    public static File[] splitFile(String targetFile,int splitSize){
        File file = new File(targetFile);
        BufferedReader reader = null;
        PrintWriter[] pws = new PrintWriter[splitSize];
        File[] littleFiles = new File[splitSize];
        String parentPath = file.getParent();
        File tempFolder = new File(parentPath + File.separator + "test");
        if(!tempFolder.exists()){
            tempFolder.mkdir();
        }
        for(int i=0;i<splitSize;i++){
            littleFiles[i] = new File(tempFolder.getAbsolutePath() + File.separator + i + ".txt");
            if(littleFiles[i].exists()){
                littleFiles[i].delete();
            }
            try {
                pws[i] = new PrintWriter(littleFiles[i]);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }
        try {
            reader = new BufferedReader(new FileReader(file));
            String tempString = null;
            while ((tempString = reader.readLine()) != null) {
                tempString = tempString.trim();
                if(tempString != ""){
                    //关键是将每行数据hash取模之后放到对应取模值的文件中,确保hash值相同的字符串都在同一个文件里面
                    int index = Math.abs(tempString.hashCode() % splitSize);
                    pws[index].println(tempString);
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
            for(int i=0;i<splitSize;i++){
                if(pws[i] != null){
                    pws[i].close();
                }
            }
        }
        return littleFiles;
    }

    /**
     * 对小文件进行去重合并
     * @param littleFiles 切割之后的小文件数组
     * @param distinctFilePath 去重之后的文件路径
     * @param splitSize 小文件大小
     */
    public static void distinct(File[] littleFiles, String distinctFilePath, int splitSize){
        File distinctedFile = new File(distinctFilePath);
        FileReader[] frs = new FileReader[splitSize];
        BufferedReader[] brs = new BufferedReader[splitSize];
        PrintWriter pw = null;
        try {
            if(distinctedFile.exists()){
                distinctedFile.delete();
            }
            distinctedFile.createNewFile();
            pw = new PrintWriter(distinctedFile);
            Set<String> unicSet = new HashSet<String>();
            for(int i=0;i<splitSize;i++){
                if(littleFiles[i].exists()){
                    System.out.println("开始对小文件:" + littleFiles[i].getName() + "去重");
                    frs[i] = new FileReader(littleFiles[i]);
                    brs[i] = new BufferedReader(frs[i]);
                    String line = null;
                    while((line = brs[i].readLine())!=null){
                        if(line != ""){
                            unicSet.add(line);
                        }
                    }
                    for(String s:unicSet){
                        pw.println(s);
                    }
                    unicSet.clear();
                    System.gc();
                }
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e1){
            e1.printStackTrace();
        } finally {
            for(int i=0;i<splitSize;i++){
                try {
                    if(null != brs[i]){
                        brs[i].close();
                    }
                    if(null != frs[i]){
                        frs[i].close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
                //合并完成之后删除临时小文件
                if(littleFiles[i].exists()){
                    littleFiles[i].delete();
                }
            }
            if(null != pw){
                pw.close();
            }
        }
    }

    public static void main(String[] args) throws IOException {
        int splitSize = 20;
        File[] files = splitFile("G://test/bigfile.txt",splitSize);
        distinct(files,"G://test/bigfile-distinct.txt",splitSize);
    }
}

执行命令:

chcp 65001
set dateStr=%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%
set "dateStr=%dateStr: =%"
@echo of
 .\Ajre\bin\java -jar .\Ajre\excelutil-1.0-SNAPSHOT.jar %cd%\excel原始数据 %cd%\%dateStr%o-phone.txt %cd%\%dateStr%-phone.txt
@pause

 

标签:java,String,io,mian,jar,File,new,import
From: https://www.cnblogs.com/mask-xiexie/p/17555889.html

相关文章

  • Java导出格式化后的JSON文件
    Java导出格式化json文件直接上代码:privatevoiddownloadJsonFile(LifeDTOlifeDTO,HttpServletResponseresponse){Stringcontent=JSON.toJSONString(lifeDTO,SerializerFeature.PrettyFormat,SerializerFeature.WriteMapNullValue,SerializerFeature......
  • leetcode刷题记录Java
    难度等级:简单给你两个字符串word1和word2。请你从word1开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。返回合并后的字符串。classSolution{publicStringmergeAlternately(Stringword1,St......
  • Java基础--day02
    变量作用域类变量、实例变量、局部变量 publicclassDemo03{/***类变量static*/staticdoublesalary=89561.36;/***实例变量*从属于对象*不初始化,会变成默认类型*00.0布尔值默认false*除了基本类......
  • 如何将Maven项目快速改造成一个java web项目(方式二)
    原始的maven项目,使用IDEA打开后,目录结构如下所示删除pom.xml文件,删除resource目录,将java目录下的代码放到项目根目录下,将webapp目录放到项目根目录下。如下图所示 开始配置项目,首先配置Project,配置好之后点击Apply,如下图, 接下来配置Facets  这时候会跳转到......
  • 学的java,工作用的go?
    学的java,找的java开发,进了公司却在使用go。第一天让拉代码,我以为我拉的是java代码,没想到却是go。当时慌死了,我只听说过go,连helloworld都没有go写过。既来之,则安之,我接下来就是装goland,配环境变量,好在代码跑起来了,这个项目使用go+Gin来进行开发,甚至连数据库都不是我熟悉......
  • 如何将Maven项目快速改造成一个java web项目(方式一)
    因为实际需要,需要将一个maven项目改造成原生的java-web项目,写这边博客来记录整个改造的过程。原始的maven项目,使用IDEA打开后,目录结构如下所示 直接通过文件夹查看项目结果如下 首先删除一些文件,只保留sql和src两个目录,如下 使用IDEA打开后的目录结构如下继续......
  • java图片从网络下载到本地
    StringpicVehicle=obj.getPicVehicle();//根路径加上传参数的路径构成文件路径地址StringrealPath=picVehicle;//文件名编码try{//构造URLURLurl=newURL(realPath);......
  • 10.JavaScript原型,原型链有什么特点
    10.JavaScript原型,原型链?有什么特点?在js中我们是使用构造函数来新建一个对象的,每一个构造函数的内部都有一个prototype属性值,这个属性值是一个对象,这个对象包含了可以由该构造函数的所有实例共享的属性和方法。当我们使用构造函数新建一个对象后,在这个对象的内部将包含......
  • Java创建对象的四种方式
    1.new创建新的对象Stringstr=newString("str");2.通过Java的反射机制publicstaticvoidmain(String[]args)throwsException{//获取类的Class对象Stringstr=(String)Class.forName("java.lang.String").newInstance();System.out.p......
  • Java字符串按字符排序的方法
     Java字符串按字符排序的方法字符串排序是一种常见的编程需求,它可以让我们按照一定的规则对字符串进行比较和排列。在Java中,有多种方法可以实现字符串按字符排序,本文将介绍四种常用的方法,并给出相应的示例代码。1.使用String类的compareTo()方法String类提供了一个compareTo......