Чтение cd cmd из приложения java командной строки - PullRequest
0 голосов
/ 18 июня 2020

Я делаю свой собственный язык программирования под названием «Mast» в java для своего исследования. Я создал компилятор под названием "cmpmast", который работает аналогично javac и g cc в том смысле, что это приложение командной строки.

Я скомпилировал проект java для этого компилятора, чтобы файл .exe и поместите его в папку, которую я добавил в PATH (windows 10). Кажется, все работает нормально, за исключением поиска входных файлов: скажем, у нас есть папка типа «C: \ users \ me \ desktop \ folder», которая содержит пустой файл «hello.mast». когда я открываю cmd, меняю каталог на эту папку и выполняю команду C:\users\me\desktop\folder>cmpmast hello.mast, программа не может найти файл.

После некоторой отладки я обнаружил, что она не смотрит внутрь компакт-диска cmd, но внутри папки, в которую я поместил файл cmpmast.exe.

Чтобы найти файл, я просто использовал класс java .io.File, например: File inputFile = new File(pathname); где путь - это аргумент, переданный моему компилятору (cmpmast).

Как мне получить компакт-диск системной консоли (cmd), в которой я запускаю свой компилятор, изнутри программы java? Я предполагаю, что это возможно, поскольку все компиляторы командной строки, которые я использовал, работали следующим образом.

Я уже пытался использовать System.getProperty("user.dir"), и это привело к тому же нежелательному пути.

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Вы делаете это: new File("hello.mast"); это то, как вы это делаете.

Тот факт, что он не работает для вас, означает, что любой инструмент, который вы использовали для создания exe-файла, изо всех сил пытается измените текущий рабочий каталог вашего процесса на каталог, в котором находится исполняемый файл. Предположительно, он делает это, чтобы позволить вам получить доступ к ресурсам там, что является ошибочным (для этого вы можете использовать механизм getResource jlClass).

Учитывая, что он делает это, невозможно восстановить рабочий каталог, в котором вы были.

Поищите инструмент, который сделал exe для вас (launch4j, возможно ) найдите возможность отключить параметр «изменить рабочий каталог». Если его там нет, ваш exe не сможет делать здесь то, что вы хотите.

1 голос
/ 18 июня 2020

ПРЕДЛОЖЕНИЕ:

  1. Пожалуйста, не связывайтесь с «преобразованием в .exe». Вероятно, в этом проекте нет необходимости.

  2. Вместо этого просто напишите простой файл .bat:

    a) Установите% PATH% и% JAVA_HOME% для вашей JRE (оба может быть необязательным)

    b) «cd» в каталог установки приложения (где бы оно ни было установлено)

    c) Вызов приложения (и оставьте его запущенным в консоли cmd window)

  3. Создайте ярлык на рабочем столе для вашего файла .bat

Вуаля! Готово!

...