Возможно ли, чтобы Eclipse считывал stdin из файла?
Чтение Eclipse stdin (System.in) из файла
Ответ 1
Чистая Java
Вы можете перенаправить System.in с помощью одной строки кода:
System.setIn(new FileInputStream(filename));
См. System.setIn().
Конфигурация Eclipse
В Eclipse 4.5 или более поздней версии диалоговое окно конфигурации запуска может установить System.in для чтения из файла. См. объявление здесь.
Ответ 2
[Обновить] Как было указано в комментариях, этот ответ вводит в заблуждение, поэтому я обновил его, чтобы исправить ошибки. [/Update]
В bash или командной строке вы можете:
C:\myprogramm < file.txt
(Windows) или ./myprogramm < file.txt
(Linux)
К сожалению, в Eclipse достичь такого же результата невозможно, так как нет возможности привязать stdin к файлу в eclipse. Вместо этого вам придется вручную открыть файловый поток в вашем коде, а затем прочитать его. Один из способов сделать это - использовать аргумент программы, чтобы включить его, а другой - с параметром файла. См. Ответ Скотта о том, какой код нужно добавить для анализа опции -d из массива аргументов программы.
Если вы хотите указать на какой-либо файл внутри вашего проекта Eclipse, вам нужно быть осторожным, чтобы получить правильное местоположение и использовать переменную ${resource_loc:}:
-d ${resource_loc:/MyProject/file}
конечно, вы также можете указать абсолютный путь:
-d path/to/file or -d C:\path\to\file
Параметр resource_loc относится к вашей рабочей области. Это папка, в которой хранятся все проекты затмения. Оттуда вы все равно должны ссылаться на свою папку проекта, а затем на файл, который хотите загрузить.
Возможно, вам придется настроить направление косой черты, в зависимости от того, используете ли вы Linux или Winodws.
Ответ 3
2015 обновление
Появилась новая версия Eclipse, Eclipse 4.5 (Mars), которая исправила проблему!
Это объявление и описание функции: http://eclipse.org/mars/noteworthy/#_assigning_stdin_to_a_file
Теперь Stdin можно назначить файлу на вкладке Обычнаяконфигурации.
Как и ожидалось, это новая функция только что выпущенного eclipse 4.5 и поэтому не будет работать в более старой версии.
Ответ 4
На вкладке "Общие" диалогового окна запуска в разделе "Стандартный ввод и вывод" есть флажок для "файла". но он, по-видимому, предназначен только для вывода...
Я ожидаю увидеть 2 поля файла, один для стандартного, один для стандартного с параметрами добавления.
Ответ 5
Вам нужно будет настроить ваш код, чтобы он работал в eclipse. Другие ответы выше не срабатывали, когда я пытался. Другой, который я видел, говоря, чтобы изменить Run.. > вкладка "Общие" > "Стандартный ввод и вывод" > "Файл" изменил поведение stdout на файл, а не на вход.
Решение заключалось в том, чтобы использовать параметр "-d" для работоспособного решения. Если вы поместите что-либо в аргументы программы, это просто будет передано в ваш основной. Итак, что вы можете сделать в начале основного, это примерно так:
Scanner in;
if (args!=null && args.length>0 && args[0].equals("-d")){
in = new Scanner(new File(args[1]));
} else {
in = new Scanner(System.in);
}
Вам все равно нужно установить параметры программы в меню "Запуск", как описано в этом.
Ответ 6
Решение для меня (работа на Mac с использованием Eclipse CDT для приложения C) заключалось в том, чтобы добавить "< path/to/somefile" в конце других аргументов на вкладке "Аргументы" в разделе "Конфигурация запуска" ".
Также проверьте этот другой вопрос для ответа, связанного с запуском Java-программы в приостановленном состоянии, а затем с помощью отладчика, использующего Eclipse.
Ответ 7
Я не вижу приятного способа сделать это, используя стандартный диалог запуска Eclipse. Тем не менее, вы можете сделать это с помощью инструментальной панели внешнего инструмента и либо использовать стандартный синтаксис "< infile", либо вызывать его .bat/.sh script, чтобы сделать это для вас.
Он не автоматизирован, что я и предполагаю, но вы можете скопировать и вставить содержимое своего infile на консоль Eclipse при запуске вашей программы.
Ответ 8
< ${workspace_loc:/MyProject/file}
в аргументах конфигурации отладки/аргументов/программ:
хорошо работает для меня.
Ответ 9
Для linux: Я думаю, самый простой способ - написать sh- script.
1) напишите run.sh следующим образом:
ваша программа с параметрами < input.txt
2) В конфигурации профиля Eclipse укажите
[вкладка Главная] С++ Запустить приложение =/bin/sh
[tab Аргументы] Аргументы программы = run.sh
Что это. Когда вы запустите проект, вы увидите вывод script в консоли eclipse. Вы можете сделать что-то подобное в Windows.
Ответ 10
Это неожиданно не поддерживается в Eclipse, и, похоже, нет текущих планов по его добавлению. Смотрите https://bugs.eclipse.org/bugs/show_bug.cgi?id=155411, чтобы следить и голосовать.
Я обновлю здесь, если он их реализует.
Ответ 11
Что я сделал, так это создать цель Ant и запустить ее как "Запустить внешний" из Eclipse, вот шаги:
- У меня есть один входной файл для чтения:
res\in.txt
и один для вывода:res\out.txt
-
Создайте
build.xml
с требуемыми вами целями (это только пример):<project basedir="." default="run" name="Tests"> <target name="clean"> <delete dir="bin"/> </target> <target name="compile"> <mkdir dir="bin"/> <javac srcdir="src" destdir="bin" includeantruntime="false"/> </target> <target name="build" depends="clean,compile"/> <target name="run" depends="build"> <java classname="Main" input="res\in.txt" output="res\out.txt" classpath="bin" /> </target> </project>
-
В Eclipse перейдите к:
Run->External Tools->External Tools Configurations->Ant Build-> New Launch Configuration
используйте следующую конфигурацию:
Section Main
Файл сборки: ${workspace_loc:/Tests/build.xml}
Базовый каталог: ${workspace_loc:/Tests}
* Примечание. Тесты - это имя моего проекта Eclipse
Теперь вы можете запустить свой проект, нажав кнопку Run Extenal на панели инструментов и изменив входные или выходные файлы по мере необходимости