gpt4 book ai didi

Java 错误 NoClassDefFoundError

转载 作者:太空宇宙 更新时间:2023-11-04 07:02:16 25 4
gpt4 key购买 nike

我在 NoClassDefFoundError 方面遇到了一些真正的麻烦,并且我正在努力了解原因以便修复它。我认为我已经正确设置了类路径,但也许我遗漏了一些东西。

这是我的错误:

enter image description here

这是我的代码(我已将所有对我的用户个人资料的直接引用替换为 [USER]):

此外,这通常是从我创建的 UI 而不是命令路径调用的,但由于没有收到错误,我将其修改为从命令窗口运行以进行测试......因为我还不能完全弄清楚 log4j。

import java.io.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.*;
import java.sql.SQLException;

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;
import org.apache.poi.hssf.usermodel.*;
import org.apache.log4j.Logger;

public class FilePrepMainStart {
//declare variables on the class level
static String fullinpath, fulloutpath, inpath, outpath, infilename, outfilename, outorigfn, delimiter, logfn;
static boolean istextfile, isexcelfile, addrecid;
//static Logger log;

//Create contructor with arguments
public void FilePrepMainStart(String in, String out, boolean txt, boolean exl, boolean rec, String delim) {
this.fullinpath = in;
this.fulloutpath = out;
this.istextfile = txt;
this.isexcelfile = exl;
this.addrecid = rec;
this.delimiter = delim;
}

private static String getPath(String in) {
//Attempts to extract the directory path from the full file path
Pattern pathPattern = createPattern("^([a-z]\\:.*\\\\)([a-zA-Z0-9 \\_\\$\\!\\?\\+\\%\\#\\@\\)\\(\\-\\.]+\\.[a-zA-Z0-9]{3,4})$");
Matcher filePath = pathPattern.matcher(in);
if (filePath.find()){
return filePath.group(1);
}
else {
return null;
}
}

private static String getFileName(String in) {
//Attempts to extract the sile name from the full file path
Pattern namePattern = createPattern("^([a-z]\\:.*\\\\)([a-zA-Z0-9 \\_\\$\\!\\?\\+\\%\\#\\@\\)\\(\\-\\.]+\\.[a-zA-Z0-9]{3,4})$");
Matcher filename = namePattern.matcher(in);
if (filename.find()){
return filename.group(2);
}
else {
return null;
}
}

private static Pattern createPattern(String pattern){
//Creates a compiled Pattern object from a String pattern
//args- pattern: String containing regex pattern to be compiled
Pattern p = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE);
return p;
}

public static String appendOut(String name, String append) {
//Adds the string "append" to the file name on output.
//First checks for a file extension
//Used to create a "_Clean" and "_Original" file
Pattern filePattern = createPattern("(.*)(\\.[a-z0-9]{3,4})$");
Matcher fileMatcher = filePattern.matcher(name);
String outfilename = name;

if (fileMatcher.find()) {
outfilename = fileMatcher.group(1) + append + fileMatcher.group(2);
}
else {
outfilename = outfilename + append;
}
return outfilename;
}

public static String appendOut(String name, String append, boolean excludeext) {
//Overloaded appendOut to allow prevention of adding extension back into the fn
//Adds the string "append" to the file name on output.
//First checks for a file extension
//Used to create a "_Clean" and "_Original" file
//boolean excludeext: True to exclude adding the file extension back into the file name
//False for default (non-overloaded) functionality
Pattern filePattern = createPattern("(.*)(\\.[a-z0-9]{3,4})$");
Matcher fileMatcher = filePattern.matcher(name);
String outfilename = name;

if (fileMatcher.find() && excludeext) {
outfilename = fileMatcher.group(1) + append;
}
else if (fileMatcher.find()) {
outfilename = fileMatcher.group(1) + append + fileMatcher.group(2);
}
else {
outfilename = outfilename + append;
}
return outfilename;
}

private static int chkEXLFile(String name) {
//Checks Excel file type
String pattern = "(.*)\\.([a-z0-9]{3,4})$";
String filename = name;
Pattern p = createPattern(pattern);
Matcher chkFile = p.matcher(filename);

if (chkFile.find()){
String file_ext = chkFile.group(2).toLowerCase();
if (file_ext.equals("xls")) {
//XLS file
return 0;
}
else if (file_ext.equals("xlsx")) {
//XLSX File
return 1;
}
else {
//Unrecognized - Not XLS or XLSX file
return -1;
}
}
else {
//Unrecognized - Not XLS or XLSX file
return -1;
}
}

public static void openXLSFileStream(String input, String output, boolean rec, String worksheet) throws FileNotFoundException, IOException {
//Opens input and output streams and kicks off processing
FileInputStream in = new FileInputStream(input);
HSSFWorkbook inbk = new HSSFWorkbook(in);
FileOutputStream out = new FileOutputStream(output);
HSSFWorkbook outbk = new HSSFWorkbook();

if (rec) {
processXLSFileWithRecID(in, inbk, out, outbk, worksheet);
}
else {

}
}

private static void processXLSFileWithRecID(FileInputStream in, HSSFWorkbook inbk, FileOutputStream out, HSSFWorkbook outbk, String worksheet) throws FileNotFoundException, IOException {
/* Reads in and loops through each excel cell to clean it
* Need to add functionality to create a new workook, could be added for each part of the loop
*/
Pattern pattern = createPattern("[^-a-z_0-9\"/\\t\\.#@\\|, ]");
int sheetnum = -1;
int sheets = inbk.getNumberOfSheets();

//Get the worksheet number for the worksheet requested
for (int i = 0; i < sheets; i++) {
if (worksheet.equals(inbk.getSheetName(i))) {
sheetnum = i;
break;
}
}

//To Do: If no worksheet is present, sheetnum will be -1, and an error should be raised
if (sheetnum == -1) {}

HSSFSheet sheet = inbk.getSheetAt(sheetnum);

int rows = sheet.getPhysicalNumberOfRows();

HSSFSheet outsheet = outbk.createSheet();

//Loop through each row of the sheet
for (int r = 0; r < rows; r++) {
HSSFRow row = sheet.getRow(r);

if (row == null) {
continue;
}

HSSFRow outrow = outsheet.createRow(r);

int cells = row.getPhysicalNumberOfCells();

//Loop through each cell of the sheet
for (int c = 0; c < cells; c++) {
HSSFCell cell = row.getCell(c);

String s = null;

HSSFCell outcell = outrow.createCell(c);

//Grab the cell value and assign it to variable s, based on the cell type
switch(cell.getCellType()) {
case HSSFCell.CELL_TYPE_FORMULA:
s = cell.getCellFormula();
break;
case HSSFCell.CELL_TYPE_NUMERIC:
s = Double.toString(cell.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_STRING:
s = cell.getStringCellValue();
break;
default:
}

Matcher matcher = pattern.matcher(s);
//If a match is found in the string:
if (matcher.find()) {
//Replace all matches
String repl = matcher.replaceAll(" ");
outcell.setCellValue(repl);
}
else {
outcell.setCellValue(s);
}
}
}

outbk.write(out);
out.close();
}

public static void run(String in, String out, boolean txt, boolean exl, boolean rec, String delim, String worksheet) {
//Primary run process
//Takes String args in, out, delim, and worksheet
//in, out are file names for input and output files; delim is delimiter for adding recid on txt files
//worksheet is the name of the worksheet that needs to be processed on Excel type files
//Takes boolean args txt, exl, and rec
//txt and exl indicate file type, diff file types have diff processing
//rec indicates is a record id is requested to be added to the file

try {
delimiter = delim;

outfilename = appendOut(out, "_Clean");
outorigfn = appendOut(out, "_Original");
//For when I add in logging
logfn = appendOut(in, "_LogFile.txt", true);

if (txt) {
openTXTStreams(in, outfilename, outorigfn, delimiter, rec);
}
else if (exl) {
int inflg = chkEXLFile(in);
int outflg = chkEXLFile(out);

if (inflg == 0) {
//throw new Exception("test");
openXLSFileStream(in, out, rec, worksheet);
}
else if (inflg == 1) {
}
else {
}
}
else {
}
}
catch(Exception ex){
ex.printStackTrace();
}
}

public static void main(String[] args) {
String in = "D:\\Users\\[USER]\\Documents\\Java\\FilePrep\\TestFiles\\Name Address Phone.xls";
String out = "D:\\Users\\[USER]\\Documents\\Java\\FilePrep\\TestFiles\\Name Address Phone_Out.xls";
boolean txt = false;
boolean exl = true;
boolean rec = false;
String delim = ",";
String worksheet = "Sheet1";
run(in, out, txt, exl, rec, delim, worksheet);
}

}

这是我用来编译的命令:

"C:\Program Files\Java\jdk1.7.0\bin\javac.exe" -d D:\Users\[USER]\Documents\Java\FilePrep\fileprep -classpath D:\Users\[USER]\Documents\Java\FilePrep\fileprep;D:\Users\[USER]\Documents\Java\FilePrep\fileprep\lib\log4j-1.2.13.jar;D:\Users\[USER]\Documents\Java\Libraries\Apache\poi-3.9\poi-ooxml-3.9-20121203.jar;D:\Users\[USER]\Documents\Java\Libraries\Apache\poi-3.9\poi-3.9-20121203.jar D:\Users\[USER]\Documents\Java\fileprep\sources\fileprep\FilePrepMainStart.java

最后,这是我当前用于从应用程序目录测试运行的命令:

java FilePrepMainStart -classpath D:\Users\[USER]\Documents\Java\FilePrep\fileprep;lib\log4j-1.2.13.jar;lib\poi-ooxml-3.9-20121203.jar;lib\poi-3.9-20121203.jar;lib\commons-codec-1.5.jar;lib\stax-api-1.0.1.jar;lib\commons-logging-1.1.jar;lib\xmlbeans-2.3.0.jar;lib\dom4j-1.6.1.jar

这是我尝试制作的第一个真正的 Java 程序。目的是一个简单的应用程序,用于清除数据文件中的特殊字符。我已经能够正确设置简单的文本文件清理,但是,我无法让该程序与 Apache POI for Excel 文件一起使用。

我正在使用 UltraEdit,因为我没有在工作时使用 Eclipse 或 NetBeans 等 IDE 的安装权限。不过,IDE 可能真的很有帮助,因为我对此还很陌生。我已经为此苦苦挣扎了一段时间,这是一个完全阻止我在 Java 方面取得进步的障碍。我研究了这个错误并尝试改变我的类路径。我无权更改 PATH 环境变量,但我不知道这是否会导致此问题。我还尝试过将 JAR 文件移动到其他位置。

任何人都可以帮助我确定我缺少什么或为我指出正确的方向吗?我对这个失去了理智。我觉得如果我是一名称职的程序员,我应该能够解决这个问题——但显然我还没有做到这一点。我很感激任何建议。

谢谢!

最佳答案

cd 到您的项目目录并尝试以下操作:

java -classpath .;lib\log4j-1.2.13.jar;lib\poi-ooxml-3.9-20121203.jar;lib\poi-3.9-20121203.jar;lib\commons-codec-1.5.jar;lib\stax-api-1.0.1.jar;lib\commons-logging-1.1.jar;lib\xmlbeans-2.3. 0.jar;lib\dom4j-1.6.1.jar FilePrepMainStart

关于Java 错误 NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21921196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com