Командная строка JAVA: «исключение файла не найдено» при вводе команды из двух слов?(когда я ввожу команду из одного слова, она работает нормально.) - PullRequest
0 голосов
/ 24 марта 2019

мой код направлен на предоставление 1) простых и 2) подробных ответов на команды, которые я набираю в командной строке Mac, в зависимости от команды, которую я ввожу (однако я хочу различать по количеству вводимых слов), командная строка выполняется только для команды длиной в одно слово и вызывает исключение для команды длиной в два слова).

Когда я ввожу java <filename> <input>, я хочу, чтобы он создавал простую версию, которую я запрограммировал, а когда я ввожу java <filename> --verbose <input>, я хочу, чтобы она производила подробную версию, которую я также запрограммировал.

Простая версия работает нормально, но подробная версия выдает ошибку, указывая на то, что ошибка связана со сканером. Вот фрагмент кода (только для справки. Вот вывод командной строки.

public class Test {
public static Scanner scan;
public static void main(String args[]) {
    //To check the length of args --> I take "check" array as an input for my method "eachCycleFCFS".
    for (int a = 0; a < args.length; a++) {
        check.add(args[a]);
    }
    try {
        String fileAddress = args[0];
        File fileInput  = new File(fileAddress); //Read
        scan = new Scanner(fileInput);
        int numProcesses  = scan.nextInt();
        ...
        for (int m = 0; m < numProcesses; m++) {
            int a = scan.nextInt();
            int b = scan.nextInt();
            int c = scan.nextInt();
            int io = scan.nextInt();
            ...
        }

    }   
    catch (Exception e){
        e.printStackTrace();
            System.out.printf(" Error: File not foundd. \n");
    }
}
public static void eachCycleFCFS (Queue<Process> processes, int numProcesses, Process[] allProcesses, Process[] original, Process[] realOriginal, ArrayList<String> check) {                
        File fileInput = new File("random-numbers.txt");
    Scanner randomInput = null;
    try {
        randomInput = new Scanner(fileInput);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    if (check.size() == 2) {
        if (check.get(0).contains("verbose")) {
            //Produce the detailed output
        }
    }
    else {
        //Produce the simple output
    }
    while (terminatedProcesses != numProcesses) {
        if (check.size() == 2) {
            if (check.get(0).equals("--verbose")) {
                //Produce the detailed output
            }
        }
    }
}

}

Длякоманда длиной в одно слово, код должен выдавать простой вывод, который я запрограммировал. Для команды длиной в два слова код должен выдать еще один блок информации поверх простого вывода. Простая версия подойдет.Подробная версия гласит:

blahblahblah$ java Scheduling2 --verbose input-1.txt
java.io.FileNotFoundException: --verbose (No such file or directory)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(FileInputStream.java:195)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at java.util.Scanner.<init>(Scanner.java:611)
    at Scheduling2.main(Scheduling2.java:18)
 Error: File not found.

Спасибо за вашу помощь и дайте мне знать, если я смогу добавить дополнительную информацию, чтобы вам было легче, пожалуйста:)!

1 Ответ

0 голосов
/ 24 марта 2019

Дело в том, что вы всегда берете имя файла из первого аргумента:

String fileAddress = args[0];
File fileInput  = new File(fileAddress); //Read

Но в этом случае ваш первый аргумент (например, args[0]) - "--verbose".Так что new File("--verbose") завершается с ошибкой FileNotFoundException, потому что действительно файл "--verbose" не существует в текущем каталоге.

Что вы, вероятно, хотите сделать, это пропустить аргументы, которые начинаются с --, например,

int argNum = 0;
while(argNum<args.length && args[argNum].startsWith("--")) {
    argNum++;
}
if(!(argNum < args.length)) {
    throw new IllegalArgumentException("Please pass file path in parameters");
}
String fileAddress = args[argNum];
File fileInput  = new File(fileAddress); //Read
...