Передача каталога с пробелом в качестве аргумента командной строки в FileReader в Java - PullRequest
0 голосов
/ 02 июля 2018
try (BufferedReader b = new BufferedReader(new FileReader(args[0]))) {
        System.out.println("Reading from file :" + args[0]);
        String s = null;
        while ((s = b.readLine()) != null) {
            System.out.println(s);
        }
    } catch (ArrayIndexOutOfBoundsException a) {
        System.out.println("No file specified, quitting !");
    } catch (FileNotFoundException fe) {
        System.out.println("File not found :" + args[0]);
    } catch (IOException ie) {
        System.out.println("Error reading file : " + ie.getMessage());
    }

здесь args [0]: G: \ Lab Practice \ file.txt

Выход: Файл не найден: G: \ Lab

Это потому, что на пути есть пробел. Я также пытался заменить args [0] на args [0] + args [1], но это не сработало. Может ли кто-нибудь помочь мне понять это?

Ответы [ 4 ]

0 голосов
/ 02 июля 2018

Вы пытались использовать кавычки?

нравится: args[0] is : "G:\Lab Practice\file.txt"

0 голосов
/ 02 июля 2018

Я полагаю, вы называете свою программу так:

java -jar application.jar G:\Lab Practice\file.txt

Это просто означает, что у вас есть два аргумента - G:\Labargs[0]) и Practice\file.txtargs[1]). Оба теперь без пробелов.

Вам нужно поставить в кавычки несколько цитат:

java -jar application.jar "G:\Lab Practice\file.txt"
0 голосов
/ 02 июля 2018

Поместите аргумент пути в кавычки - например,

java com.your.application.Main "G:\Lab Practice\file.txt"
0 голосов
/ 02 июля 2018

Просто поместите аргумент в кавычки:

java Class "G:\Lab Practice\file.txt"

Без пробела он обрабатывает каждый из них как отдельный аргумент в массиве args, поэтому G:\Lab равно args[0] и Practice\file.txt равно args[1] в вашем примере.

Из документов :

Это потому, что символ пробела разделяет аргументы командной строки. Чтобы Drink, Hot и Java интерпретировались как один аргумент, пользователь присоединится к ним, заключив их в кавычки.

...