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

使用多个外部jar文件编译和运行java程序,java,linux,apache-poi,javac,javacompiler,Java,Linux,Apache Poi,Javac,Javacompiler,我有一个简单的程序,它使用apache.poi外部库来操作excel文件。我在windows环境中使用了eclipse,现在我必须用终端在linux上编译和运行我的程序。我搜索了如何包含我需要的那些罐子,但最终出现以下错误: 错误:无法找到或加载主类xlsToCsv 我遵循的步骤如下: javac-cp./jars/poi-3.13-20150929.jar:./jars/poi-ooxml-schemas-3.13-20150929.jar:./jars/poi-ooxml-3.13-2015

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

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

我遵循的步骤如下:

javac-cp./jars/poi-3.13-20150929.jar:./jars/poi-ooxml-schemas-3.13-20150929.jar:./jars/poi-ooxml-3.13-20150929.jar:./jars/xmlbeans-2.6.0.jar xlsToCsv.java

java-cp./jars/poi-3.13-20150929.jar:./jars/poi-ooxml-schemas-3.13-20150929.jar:./jars/poi-ooxml-3.13-20150929.jar:./jars/xmlbeans-2.6.0.jar xlsToCsv

我当前的目录是/home/demo/Desktop/xls_to_csv,其中是xlsToCsv.java文件。jar文件位于/home/demo/Desktop/xls\u-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();
        }
    }
}
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.FileOutputStream;
导入java.util.Iterator;
导入org.apache.poi.hssf.usermodel.hssformulaevaluator;
导入org.apache.poi.hssf.usermodel.HSSFWorkbook;
导入org.apache.poi.ss.usermodel.Cell;
导入org.apache.poi.ss.usermodel.DataFormatter;
导入org.apache.poi.ss.usermodel.FormulaEvaluator;
导入org.apache.poi.ss.usermodel.Row;
导入org.apache.poi.ss.usermodel.Sheet;
公共类xlsToCsv{
静态void convert(文件输入、文件输出)引发异常{
StringBuffer数据=新的StringBuffer();
FileOutputStream fos=新的FileOutputStream(输出);
HSSFWorkbook file=新的HSSFWorkbook(新文件输入流(输入));
DataFormatter objDefaultFormat=新的DataFormatter();
FormulaEvaluator objFormulaEvaluator=新的HSSF公式评估器((HSSF工作簿)文件);
薄板;
行行;
细胞;
字符串sheetName,cellValue;
int-cellType,行索引=0,列索引=0;
布尔blankRow=true,blankArea=true;
迭代器;
迭代器rowIt;
迭代器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();
如果(!isBlankCell(cellType)| |!blankArea){
if(rowIndex==0&&columnIndex==0)
数据。追加(sheetName+“-标题“+”;”);
else if(rowIndex>0&&columnIndex==0)
数据。追加(sheetName+“;”);
objFormulaEvaluator.evaluateInCell(单元格);
cellValue=objDefaultFormat.formatCellValue(单元格,objFormulaEvaluator);
if(cellValue.isEmpty())
数据。追加(“;”);
其他的
数据。追加(cellValue+“;”);
columnIndex++;
blankRow=false;
空白区域=假;
}
}
如果(!blankRow){
data.append('\n');
rowIndex++;
}
blankRow=true;
柱状指数=0;
}
//新工作表=>重置控制字段
rowIndex=0;
柱状指数=0;
blankRow=true;
空白区域=真;
}
fos.write(data.toString().getBytes());
fos.close();
}
专用静态布尔值isBlankCell(int cellType){
返回cellType==Cell.Cell\u TYPE\u BLANK
||cellType==Cell.Cell\u类型\u错误
||cellType==Cell.Cell\u TYPE\u公式;
}
公共静态void main(字符串[]args){
如果(args.length<2 | | args.length>2){
System.err.println(“插入输入和输出路径”);
系统出口(0);
}
文件输入=新文件(args[0]);
文件输出=新文件(args[1]);
试一试{
转换(输入、输出);
System.out.println(“文件”+output.getName()+“创建成功”);
}捕获(例外e){
e、 printStackTrace();
}
}
}

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

在Windows中:

java-类路径“;c:\lib*”MainClass

在UNIX/Linux中

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

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


(点)表示当前目录

您的Java文件上有任何包声明吗?Java文件编译时没有任何错误吗?@Jens我将用我的程序编辑这个问题。@Jens,但是是的,编译时没有错误。试试这个
Java-classpath.;c:\lib\*“MainClass
我遇到了一个问题。如果我不将目录更改为.java文件所在的文件夹,那么该命令应该是什么?我这样问是因为我也编译了该文件,但当我尝试运行它时,会出现以下错误:>错误:无法找到或加载main class.home.demo.Desktop.xls_到_csv.xlsToCsv。我所做的是:>javac-classpath.“:/home/demo/Desktop/xls_to_csv/jars/*”/home/demo/Desktop/xls_to_csv/xlsToCsv.java.>java-cla