当前位置: 首页 > 知识库问答 >
问题:

使用多个外部jar文件编译并运行java程序

凤高澹
2023-03-14

我有一个使用apache的简单程序。poi外部库以操作excel文件。我在windows环境中使用了eclipse,现在我必须用terminal在linux上编译和运行我的程序。我搜索了如何包含我需要的那些罐子,但最终出现了以下错误:

错误:无法找到或加载主类xlsToCsv。

我遵循的步骤如下:

javac-cp/jars/poi-3.13-20150929。罐子:/jars/poi-ooxml-schemas-3.13-20150929。罐子:/jars/poi-ooxml-3.13-20150929。罐子:/jars/xmlbeans-2.6.0。jar xlsToCsv。JAVA

java-cp/jars/poi-3.13-20150929。罐子:/jars/poi-ooxml-schemas-3.13-20150929。罐子:/jars/poi-ooxml-3.13-20150929。罐子:/jars/xmlbeans-2.6.0。jar xlsToCsv

我当前的目录是/home/demo/Desktop/xls_to_csv,其中是xlsToCsv。java文件。jar文件位于/home/demo/Desktop/xls_到_csv/jars中。

谁能告诉我并解释正确的语法?有可能调用一个包含所有jar文件的文件夹,而不是单独调用它们吗?

提前谢谢。

编辑,我的代码:

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.util.Iterator;
    import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.DataFormatter;
    import org.apache.poi.ss.usermodel.FormulaEvaluator;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Sheet;

public class xlsToCsv {

    static void convert(File input, File output) throws Exception {

        StringBuffer data = new StringBuffer();

        FileOutputStream fos = new FileOutputStream(output);
        HSSFWorkbook file = new HSSFWorkbook(new FileInputStream(input));
        DataFormatter objDefaultFormat = new DataFormatter();
        FormulaEvaluator objFormulaEvaluator = new HSSFFormulaEvaluator((HSSFWorkbook) file);

        Sheet sheet;
        Row row;
        Cell cell;

        String sheetName, cellValue;
        int cellType, rowIndex = 0, columnIndex = 0;
        boolean blankRow = true, blankArea = true;


        Iterator<Sheet> sheetIt;
        Iterator<Row> rowIt;
        Iterator<Cell> cellIt;

        sheetIt = file.iterator();
        while(sheetIt.hasNext()) {
            sheet = sheetIt.next();
            sheetName = sheet.getSheetName();

            rowIt = sheet.iterator();
            while(rowIt.hasNext()) {
                row = rowIt.next();

                cellIt = row.iterator();
                while (cellIt.hasNext()) {
                    cell = cellIt.next();
                    cellType = cell.getCellType();

                    if(!isBlankCell(cellType) || !blankArea) {
                        if(rowIndex == 0 && columnIndex == 0)
                            data.append(sheetName + " - Header" + ";");
                        else if(rowIndex > 0 && columnIndex == 0)
                            data.append(sheetName + ";");

                        objFormulaEvaluator.evaluateInCell(cell);
                        cellValue = objDefaultFormat.formatCellValue(cell,objFormulaEvaluator);

                        if(cellValue.isEmpty())
                            data.append(";");
                        else
                            data.append(cellValue + ";");

                        columnIndex++;
                        blankRow = false;
                        blankArea = false;
                    }
                }

                if(!blankRow) {
                    data.append('\n');
                    rowIndex++;
                }

                blankRow = true;
                columnIndex = 0;
            }
            //new sheet => reset control fields
            rowIndex = 0;
            columnIndex = 0;
            blankRow = true;
            blankArea = true;
        }

        fos.write(data.toString().getBytes());
        fos.close();
    }

    private static boolean isBlankCell(int cellType) {
        return cellType == Cell.CELL_TYPE_BLANK
                || cellType == Cell.CELL_TYPE_ERROR
                || cellType == Cell.CELL_TYPE_FORMULA;
    }

    public static void main(String[] args) {

        if(args.length < 2 || args.length > 2) {
            System.err.println("Insert input and output path");
            System.exit(0);
        }

        File input = new File(args[0]);
        File output = new File(args[1]);

        try {
            convert(input, output);
            System.out.println("File " + output.getName() + "created sucessfully");

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

共有1个答案

弓举
2023-03-14

如果要在包含运行/编译Java文件所需的所有JAR的同时添加目录,可以使用以下命令:

在Windows中:

java-classpath".; c:\lib*"MainClass

在UNIX/Linux中

java-类路径“:/lib/*”MainClass

注意:在windows中(分号)是分隔符,而在UNIX/Linux中(冒号)是目录的多个jar的分隔符

.(点)表示当前目录

 类似资料:
  • 注意:test.class文件也使用了example.jar文件中的类文件,有自己的包结构。 我知道我可以将它们放在一个jar文件中,不幸的是我需要将test.class文件分开。

  • 我尝试使用以下命令编译2个jar文件和4个java源文件: javac-classpath junit-4.12.jar jar2.jar 1.java 2.java 3.java 4.java 但是,我得到以下错误:

  • 问题内容: 如何编译和运行以下程序: Test1.java: Test2.java: 我是新手。如果我使用编译 并手动创建目录A,则将Test1.class复制到其中,然后手动创建目录B,并将Test2.class复制到其中,然后运行它。我确信这不是正确的方法。请提出建议。 问题答案: 您需要将Java文件保留在正确的目录结构中: 通常仅在您的主类上调用就足够了,因为所有依赖项都将自动处理。我说了

  • 我想用外部jar文件在远程服务器上运行Java代码。我参考了本教程并运行IntelliJ IDE来生成整个项目的jar文件。现在我可以在本地终端上成功运行以下代码。 代码将成功运行。然而,当我在服务器上尝试同样的事情时。编译过程可以在没有任何错误或警告的情况下完成。 我已经检查了类文件在目录中生成。 然而,第二步将返回错误,因为,我不确定为什么会发生这种情况。

  • 我试图写一个Java程序,它得到一个可执行文件运行在Linux下。此可执行文件接收两个参数,并使用这两个给定参数执行nmap-sp操作。 我将此文件称为file.exe,其内容如下: 我得到以下异常和错误日志: 线程“main”java.io.ioException中的异常:无法运行程序“file.exe”:error=2,在java.lang.runtime.exec(runtime.java: