简体   繁体   中英

Errors When Running Java from Command Prompt

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.

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