I am having issues with running a java program from Command Prompt. I have a java file called DataRecover, and I have a second java file that is called Triple. Now, when I run javac Triple.java in Command Prompt, it does what it is supposed to. However, when I run javac DataRecover.java, it comes with this error message: "Exception in thread "main" java.lang.NoClassDefFoundError: DataRecover (wrong name: projectbeng\\DataRecover
DataRecover.java:61: error: cannot find symbol
static Triple extractTriples(String str) {
^
symbol: class Triple
location: class DataRecover
DataRecover.java:30: error: cannot find symbol
Triple triples = extractTriples(line);
^
symbol: class Triple
location: class DataRecover
EDIT: I have included both classes. I have now been able to run the javac command, and there is a CLASS file for each in the proper folder. Now, I need to run the DataRecover file in Command Prompt. When I run "java DataRecover" I get the following error: "Exception in thread "main" java.lang.NoClassDefFoundError: DataRecover (wrong name: projectbeng\\DataRecover)".
package projectbeng;
import java.util.Scanner;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.File;
import java.io.IOException;
public class DataRecover {
public static void main(String[] args) throws Exception {
//Create a Scanner for the user
Scanner sc = new Scanner(System.in);
System.out.print("Enter file name to process: ");
File fileName = new File(sc.nextLine() + ".txt"); //Do not include the .txt extension
if(!fileName.exists()){ //does not exist
throw new IOException("File \"" + fileName + "\" not found.");
}
System.out.println("\nProcessing file: " + fileName + "\n----------------------------------------");
BufferedReader br = new BufferedReader(new FileReader(fileName));
int lineCount = 0; //assumes file does not end with a new line character
int tripleLineCount = 0;
int tripleCount = 0;
String line = "";
//Read data from file
while((line = br.readLine()) != null){ //has another line in the file
lineCount++;
if(!line.equals("")) { //is not a blank line
Triple triples = extractTriples(line);
if(triples.getHasTriple()) { //line contains triples
System.out.println(triples.getTriples());
tripleLineCount++;
}
for(int j = 0; j < triples.getTriples().length(); j++) {
if(triples.getTriples().charAt(j) == '(') tripleCount++;
}
}
}
//prints out the summary of the file
System.out.println("\nSummary\n----------------------------------------");
System.out.println("Total lines: " + lineCount);
System.out.println("Lines containing triples: " + tripleLineCount);
System.out.println("Total number of triples: " + tripleCount);
}
/*Given a string, returns a Triple with a string containing the triples (if any) and a boolean stating whether
or not it contains a triple.
Assumptions:
1.) If a '-' sign is found, it has been added. If preceeding a number (for example -32), the number is 32 where
the '-' sign is simply garbage.
2.) If a '.' is found in a number (for example 2.32), the potential integers are 2 and 32 where the '.' is
garbage.
3.) For part c, if the first valid character found is a letter, this will always be the real triple. It does not
matter whether or not it is part of a word (for example, if it comes across "Dog a", 'D' will be the triple.)
4.) The strings "<null>", "<cr>", "<lf>", and "<eof>" as well as multi-digit numbers (ex. 32) count as single
characters. Thus, they cannot be broken up (no garbage in between the characters).
*/
static Triple extractTriples(String str) {
/*Grammar:
Triple is in form (a,b,c) where a is either a non-negative integer or the string "<null>", b is a
non-negative integer where b <= a (b must be 0 if a is <null>), and c is either an individual letter
(upper or lower case), period, colon, semicolon, or one of the three strings "<cr>", "<lf>", or "<eof>".
state == 0 ==> needs left parenthesis
state == 1 ==> needs right parenthesis
state == 2 ==> needs comma
state == 3 ==> needs a
state == 4 ==> needs b
state == 5 ==> needs c
*/
int state = 0;
int a = -1;
int b = -1;
String triples = "";
String tempTriples = "";
for(int i = 0; i < str.length(); i++) {
if(str.charAt(i) == '.' || str.charAt(i) == ':' || str.charAt(i) == ';' || str.charAt(i) == '<' ||
(str.charAt(i) >= 'a' && str.charAt(i) <= 'z') || (str.charAt(i) >= 'A' && str.charAt(i) <= 'Z')
|| (str.charAt(i) >= '0' && str.charAt(i) <= '9') || str.charAt(i) == ',' ||
str.charAt(i) == '(' || str.charAt(i) == ')') {
if(state == 0) {
if(str.charAt(i) == '(') {
tempTriples = str.substring(i, i+1);
state = 3;
}
}else if(state == 1) {
if(str.charAt(i) == ')') {
triples = triples + tempTriples + str.substring(i, i+1) + " ";
tempTriples = "";
state = 0;
a = -1;
b = -1;
}
}else if(state == 2) {
if(str.charAt(i) == ',') {
tempTriples = tempTriples + str.substring(i, i+1);
if(b != -1) state = 5;
else state = 4;
}
}else if(state == 3) {
if(str.charAt(i) >= '0' && str.charAt(i) <= '9') {
int j = i;
while(j < str.length() && str.charAt(j) >= '0' && str.charAt(j) <= '9') j++;
a = Integer.parseInt(str.substring(i, j));
i = j - 1;
tempTriples = tempTriples + a;
state = 2;
}else if(str.length() > i + 5 && str.substring(i, i+6).equals("<null>")) {
a = 0;
tempTriples = tempTriples + str.substring(i, str.indexOf(">", i)+1);
i = str.indexOf(">", i);
state = 2;
}
}else if(state == 4) {
if(str.charAt(i) >= '0' && str.charAt(i) <= '9') {
int j = i;
while(j < str.length() && str.charAt(j) >= '0' && str.charAt(j) <= '9') j++;
b = Integer.parseInt(str.substring(i, j));
i = j - 1;
if(b <= a) {
tempTriples = tempTriples + b;
state = 2;
}else b = -1;
}
}else if(state == 5) {
if(str.charAt(i) == '.' || str.charAt(i) == ':'||(str.charAt(i) <= 'z' && str.charAt(i) >= 'a')
|| str.charAt(i) == ';' || (str.charAt(i) <= 'Z' && str.charAt(i) >= 'A')) {
tempTriples = tempTriples + str.substring(i, i+1);
state = 1;
}else if((str.length() > i + 4 && str.substring(i, i+5).equals("<eof>")) ||
(str.length() > i + 3 && (str.substring(i, i+4).equals("<cr>") ||
str.substring(i, i+4).equals("<lf>")))) {
tempTriples = tempTriples + str.substring(i, str.indexOf(">", i)+1);
i = str.indexOf(">", i);
state = 1;
}else if(str.length() > i + 5 && str.substring(i, i+6).equals("<null>")) {
i = str.indexOf(">", i);
}
}
}
}
Triple triple = new Triple(true, triples);
if(triples.equals("")) triple.setHasTriple(false); //does not contain a triple
return triple;
}
package projectbeng; class Triple { boolean hasTriple = this.hasTriple; String triple = this.triple; //creates a new Triple Triple(boolean newHasTriple, String newTriple){ this.hasTriple = newHasTriple; this.triple = newTriple; } //returns whether or not Triple contains any triples boolean getHasTriple() { return hasTriple; } //returns the triples in Triple String getTriples() { return triple; } //changes the state of whether a Triple contains triples void setHasTriple(boolean newHasTriple){ this.hasTriple = newHasTriple; } }
What is the proper way to run the DataRecover file through Command Prompt?
When you are referencing the source files in other files, you have to give all those files together. In your case it should be:
javac Triple.java DataRecover.java
Many modern Java projects use build tools to help with the management of source files. Two popular Java build tools are Gradle and Maven.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.