繁体   English   中英

无法使用Java程序执行jar文件。 我需要将文件路径作为命令行参数传递给jar文件

[英]unable to execute the jar file using java program. i need to pass the file path as a command line argument to the jar file

下面的代码无法写入文件。

我写了一个程序来执行cmd中的命令。 这些命令不过是执行jar文件中的java文件而已。 此jar文件中的java文件期望文件路径作为命令行参数。

注意:-jar文件也仅由我创建。

这是我的java文件

public class ExcelDriver extends Thread {
    public static void main(String[] args) throws IOException, InterruptedException {


        File directory = new File("C://Users//kondeti.venkatarao//Documents//Regresion_sheets//custome");
        File[] files = directory.listFiles();
        for (File file: files) {
            System.out.println("\""+file.getAbsolutePath()+"\"");
            if(file.isFile()){
                Runtime.getRuntime().exec("cmd.exe /c start java -jar Demo.jar readExcelDemo.Final "+file.getAbsolutePath());
                ExcelDriver.sleep(5000);
            }
        }


            }
}

这是jar文件代码

public class Final {

    public static int getExcelColumnNumber(String column) {
        int result = 0;
        for (int i = 0; i < column.length(); i++) {
            result *= 26;
            result += column.charAt(i) - 'A' + 1;
        }
        return result;
    }

    public static String getExcelColumnName(int number) {
        final StringBuilder sb = new StringBuilder();

        int num = number - 1;
        while (num >=  0) {
            int numChar = (num % 26)  + 65;
            sb.append((char)numChar);
            num = (num  / 26) - 1;
        }
        return sb.reverse().toString();
    }


    void run(File file, File errors, File misMatchs) throws IOException{


        if (file.getName().endsWith(".xlsx") || file.getName().endsWith(".xlsm")) {
            FileInputStream fis = new FileInputStream(file);

            StringBuilder error = new StringBuilder();
            StringBuilder misMatch = new StringBuilder();
            // Create Workbook instance holding reference to .xlsx file

            //OPCPackage pkg = OPCPackage.open(file, PackageAccess.READ);
            XSSFWorkbook workbook = new XSSFWorkbook(fis);
            int i = 1;
            while (i < workbook.getNumberOfSheets()) {

                // System.out.println(workbook.getNumberOfSheets());
                // Get first/desired sheet from the workbook
                XSSFSheet sheet = workbook.getSheetAt(i);
                if(sheet.getRow(0).getCell(0).getRawValue().equalsIgnoreCase("fail")){

                    // Iterate through each rows one by one
                    Iterator<Row> rowIterator = sheet.iterator();
                    while (rowIterator.hasNext()) {
                        Row row = rowIterator.next();
                        // For each row, iterate through all the columns
                        Iterator<Cell> cellIterator = row.cellIterator();
                        while (cellIterator.hasNext()) {
                            Cell cell = cellIterator.next();
                            // Check the cell type and format accordingly
                            switch (cell.getCellType()) {
                            /*
                             * case Cell.CELL_TYPE_NUMERIC:
                             * System.out.print(cell.getNumericCellValue());
                             * break; case Cell.CELL_TYPE_STRING:
                             * System.out.print(cell.getStringCellValue());
                             * break;
                             */
                            // case Cell.CELL_TYPE_FORMULA:
                            case Cell.CELL_TYPE_FORMULA:

                                if (cell.getCellFormula().startsWith("IF("))
                                    if (sheet.getRow(row.getRowNum()).getCell(cell.getColumnIndex()).getRawValue().equals("1")) {

                                        HashSet<Integer> number = new HashSet<Integer>();
                                        ArrayList<String> alphas = new ArrayList<String>();

                                        String formula = sheet.getRow(row.getRowNum()).getCell(cell.getColumnIndex()).toString();
                                        Matcher digitMatcher = Pattern.compile("\\d+").matcher(formula);
                                        Matcher alphabetMatcher = Pattern.compile("[a-zA-Z]+").matcher(formula);

                                        while (alphabetMatcher.find()) {
                                            if (!alphabetMatcher.group().equals("TYPE"))
                                                alphas.add(alphabetMatcher.group());
                                        }

                                        int countIF = Collections.frequency(alphas, "IF");
                                        int countABS = Collections.frequency(alphas, "ABS");
                                        HashSet<String> alphaSet = new HashSet<String>(alphas);
                                        if (countIF != 5 && countIF != 6)
                                            alphaSet.remove("IF");
                                        if (countABS != 3 && countABS != 4)
                                            alphaSet.remove("ABS");

                                        while (digitMatcher.find()) {
                                            if (!digitMatcher.group().equals("0") && !digitMatcher.group().equals("1") && !digitMatcher.group().equals("01"))
                                                number.add(Integer.parseInt(digitMatcher.group()));
                                        }

                                        ArrayList<Integer> numberList = new ArrayList<Integer>(number);
                                        ArrayList<String> alphaList = new ArrayList<String>(alphaSet);
                                        System.out.println("alphaSet"+ alphaSet);
                                        System.out.println("numberList"+ numberList);

                                        int rowIndex = numberList.get(0) - 1;
                                        int originalColumnIndex = getExcelColumnNumber(alphaList.get(0)) - 1;
                                        int referenceColumnIndex = getExcelColumnNumber(alphaList.get(1)) - 1;
                                        if (originalColumnIndex > referenceColumnIndex) {
                                            int temp = referenceColumnIndex;
                                            referenceColumnIndex = originalColumnIndex;
                                            originalColumnIndex = temp;
                                        }

                                        // System.out.println(sheet.getRow(row.getRowNum()));
                                        System.out.println("File Name: "+ file.getName());
                                        System.out.println("Sheet Name: "+ sheet.getSheetName());
                                        System.out.println(sheet.getRow(row.getRowNum()).getCell(cell.getColumnIndex()).toString());
                                        if (sheet.getRow(rowIndex).getCell(originalColumnIndex).getCellFormula().equals(""))
                                            System.out.println("please help me out");
                                        System.out.println("Function Name: "+ sheet.getRow(rowIndex).getCell(originalColumnIndex).getCellFormula());
                                        System.out.println("row indext"+ rowIndex);
                                        System.out.println("original column index"+ originalColumnIndex);
                                        System.out.println("ref column index"+ referenceColumnIndex);
                                        /*
                                         * System.out.println("File Name: " +
                                         * file.getName());
                                         * System.out.println("Sheet Name: " +
                                         * sheet.getSheetName());
                                         * System.out.println(cell
                                         * .getCellFormula());
                                         */
                                        if (sheet.getRow(rowIndex).getCell(originalColumnIndex).getCellFormula().contains("qCRA_")&& sheet.getRow(rowIndex)
                                                        .getCell(originalColumnIndex).getRawValue().contains("Error:")) {
                                            error.append(System.getProperty("line.separator"));
                                            error.append("File Name: "+ file.getName());
                                            error.append(System.getProperty("line.separator"));
                                            error.append("Sheet Name: "+ sheet.getSheetName());
                                            error.append(System.getProperty("line.separator"));
                                            error.append("Function Name: "+ sheet.getRow(rowIndex).getCell(originalColumnIndex).getCellFormula());
                                            error.append(System.getProperty("line.separator"));
                                            error.append("Cell Number: "+getExcelColumnName(originalColumnIndex+1)+numberList.get(0));
                                            error.append(System.getProperty("line.separator"));
                                            error.append("Orginal Value : "+sheet.getRow(rowIndex).getCell(originalColumnIndex).getRawValue());
                                            error.append(System.getProperty("line.separator"));
                                            error.append("Reference Value : "+sheet.getRow(rowIndex).getCell(referenceColumnIndex));
                                            error.append(System.getProperty("line.separator"));
                                        } else {
                                            misMatch.append(System.getProperty("line.separator"));
                                            misMatch.append("File Name: "+ file.getName());
                                            misMatch.append(System.getProperty("line.separator"));
                                            misMatch.append("Sheet Name: "+ sheet.getSheetName());
                                            misMatch.append(System.getProperty("line.separator"));
                                            misMatch.append("Function Name: "+ sheet.getRow(rowIndex).getCell(originalColumnIndex).getCellFormula());
                                            misMatch.append(System.getProperty("line.separator"));
                                            misMatch.append("Cell Number: "+getExcelColumnName(originalColumnIndex+1)+numberList.get(0));
                                            misMatch.append(System.getProperty("line.separator"));
                                            misMatch.append("Orginal Value : "+sheet.getRow(rowIndex).getCell(originalColumnIndex).getRawValue());
                                            misMatch.append(System.getProperty("line.separator"));
                                            misMatch.append("Reference Value : "+sheet.getRow(rowIndex).getCell(referenceColumnIndex));
                                            misMatch.append(System.getProperty("line.separator"));
                                        }
                                    }
                                break;

                            }
                            cell = null;
                        }
                        row = null;
                    }
                }
                i++;
                fis.close();
                sheet=null;
            }
            workbook=null;
            //FileUtils.writeStringToFile(errors, error.toString(),true);
            //FileUtils.writeStringToFile(misMatchs, misMatch.toString(),true);
            FileWriter errorsFileWriter = new FileWriter(errors,true);
            BufferedWriter errorsBufferedWriter = new BufferedWriter(errorsFileWriter);
            errorsBufferedWriter.write(error.toString());
            errorsBufferedWriter.flush();
            errorsBufferedWriter.close();

            FileWriter misMatchFileWriter = new FileWriter(misMatchs, true);
            BufferedWriter misMatchesBufferedWriter = new BufferedWriter(misMatchFileWriter);
            misMatchesBufferedWriter.write(misMatch.toString());
            misMatchesBufferedWriter.flush();
            misMatchesBufferedWriter.close();
        }
}



    public static void main(String[] args) {
        try {
            String filepath = args[0];//.replace("\" , ", "\\");
            //System.out.println(filepath);
            File directory = new File(filepath);

            File errors = new File("C://Users//kondeti.venkatarao//Documents//Regresion_sheets//Error.txt");
            if(!errors.exists()){
                errors.createNewFile();
            }


            File mismatch = new File("C://Users//kondeti.venkatarao//Documents//Regresion_sheets//Mismatch.txt");
            if(!mismatch.exists()){
                mismatch.createNewFile();
            }

            Final hvd=new Final();
            hvd.run(directory,errors,mismatch);

                    } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

问题是调用它时传递给Jar文件的内容。 您的Jar文件设置为使用它收到的第一个参数作为您要使用的目录:

public static void main(String[] args) {
    ...
        String filepath = args[0];//.replace("\" , ", "\\");  // First parameter
        File directory = new File(filepath);
        ....

但是,当您调用它时,实际上是将“ readExcelDemo.Final”作为第一个参数传递,而不是您希望目录成为的样子:

    File directory = new File("C://Users//kondeti.venkatarao//Documents//Regresion_sheets//custome");
    ...
    for (File file: files) {
        ...
            Runtime.getRuntime().exec("java -jar Demo.jar readExcelDemo.Final " + file.getAbsolutePath()); 

因此,您的解决方案将是三件事之一:

  1. 更改Jar文件以使用第二个输入(最简单,但不是最好的)
  2. 设置您的实现以将文件路径作为第一个参数传递(最简单的第二个,但仍然不是最好的)
  3. 对您发送Jar文件的内容进行参数化(例如,“ dir = C:/ path / to / dir”),则无需担心参数排序(最困难,但如果您可能传递更多参数,则值得这样做)参数)

希望有帮助〜

编辑:

PS:我假设您也没有任何异常,因为它确实在工作,但是包含结果的目录将位于您的根项目目录/readExcelDemo.Final中,而不是您希望使用的路径

PPS:另外,您的执行命令不需要cmd.exe /c start的第一部分,而应替换为:

Runtime.getRuntime().exec("java -jar Demo.jar readExcelDemo.Final " + file.getAbsolutePath());

在我的原始帖子的第一部分中,我还随意替换了它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM