Eclipse, читающий стандартный файл (System.in) из файла
Возможно ли для Eclipse читать stdin из файла?
11 ответов
Чистая Ява
Вы можете перенаправить System.in одной строкой кода:
System.setIn(new FileInputStream(filename));
Смотрите System.setIn ().
Eclipse config
В Eclipse 4.5 или более поздней версии диалоговое окно конфигурации запуска может настроить System.in для чтения из файла. Смотрите объявление здесь.
[Обновить] Как было отмечено в комментариях, этот ответ вводил в заблуждение, поэтому я обновил его, чтобы исправить ошибки. [/Обновить]
В bash или командной строке вы можете сделать:C:\myprogramm < file.txt
(Windows) или ./myprogramm < file.txt
(Linux)
К сожалению, в Eclipse невозможно достичь того же результата, поскольку нет возможности привязать stdin к файлу в eclipse. Вместо этого вам придется вручную открыть поток файлов в вашем коде, а затем читать из него. Один из способов сделать это - использовать программный аргумент, чтобы включить его, а другой - с параметром file. Посмотрите ответ Скотта о том, какой код нужно добавить, чтобы разобрать опцию -d из массива аргументов программы.
Если вы хотите указать на какой-то файл внутри вашего проекта Eclipse, вам нужно быть осторожным, чтобы правильно определить местоположение и использовать переменную ${resource_loc:}:
-d ${resource_loc:/MyProject/file}
Конечно, вы также можете указать абсолютный путь:
-d path/to/file or -d C:\path\to\file
Параметр resource_loc относится к вашей рабочей области. Это папка, в которой хранятся все ваши проекты затмений. Оттуда вам все равно нужно обратиться к папке вашего проекта, а затем к файлу, который вы хотите загрузить.
Возможно, вам придется изменить направление слеша, в зависимости от того, используете ли вы Linux или Winodws.
Обновление 2015 года
Существует новая версия Eclipse, Eclipse 4.5 (Mars), которая исправила проблему!
Это объявление и описание функции: http://eclipse.org/mars/noteworthy/
Теперь Stdin можно назначить файлу на вкладке Common диалоговых окон конфигурации запуска.
Как и ожидалось, это новая функция только что выпущенного eclipse 4.5 и поэтому не будет работать в более старой версии.
На вкладке "Общие" диалогового окна "Выполнить" в разделе "Стандартный ввод и вывод" установлен флажок "Файл". но, похоже, только для вывода...
Я ожидаю увидеть там 2 файловых поля, одно для стандартного ввода, одно для стандартного ввода с опциями добавления.
Вам нужно будет немного подправить свой код, чтобы это работало в затмении. Другие ответы выше не работали, когда я пытался. Еще я видел высказывание об изменении "Выполнить"> вкладка "Общие"> "Стандартный ввод и вывод"> "Файл", которое изменило только поведение stdout для файла, а не для ввода.
Решение состояло в том, чтобы перевести опцию "-d" в работоспособное решение. Если вы введете что-либо в аргументы программы, это будет просто передано в ваш основной файл. Так что вы можете сделать в начале main что-то вроде этого:
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);
}
Вам все еще нужно будет установить аргументы вашей программы в меню Run.., как описано в этом ответе.
Решение для меня (запуск на Mac и использование Eclipse CDT для приложения на C) заключался в добавлении "<путь / к / somefile" в конце других аргументов на вкладке "Аргументы" диалогового окна "Запуск конфигурации".
Также проверьте этот другой вопрос для ответа, включающего запуск программы Java в приостановленном состоянии и затем присоединение отладчика с использованием Eclipse.
< ${workspace_loc:/MyProject/file}
в конфигурации отладки / аргументы / аргументы программы:
хорошо работает для меня
Я не вижу хорошего способа сделать это с помощью стандартного диалога Eclipse Run. Однако вы можете сделать это с помощью внешнего средства запуска инструментов и либо использовать стандартный синтаксис " Он не автоматизирован, что, как я полагаю, вам нужно, но вы можете копировать и вставлять содержимое своего infile в консоль Eclipse при запуске вашей программы.
Для Linux: я думаю, самый простой способ - написать sh-скрипт.
1) напишите run.sh так:
ваша программа с параметрами 2) В настройках профиля Eclipse укажите [tab Main] C++ Запустить приложение = / bin / sh [tab Arguments] Программные аргументы = run.sh Вот и все. Когда вы запустите свой проект, вы увидите вывод скрипта в консоли eclipse. Вы можете сделать что-то подобное в Windows.
Это неожиданно не поддерживается в Eclipse, и, похоже, в настоящее время нет планов его добавления. Смотрите https://bugs.eclipse.org/bugs/show_bug.cgi?id=155411 чтобы следить и голосовать.
Я буду обновлять здесь, если это они реализуют это.
Что я сделал, так это создал цель 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
Buildfile: ${workspace_loc:/Tests/build.xml}
Базовый каталог: ${workspace_loc:/Tests}
* Примечание: Tests - это название моего проекта Eclipse.
Теперь вы можете запустить свой проект, нажав на кнопку панели инструментов Run Extenal и изменив входные или выходные файлы, как вам нужно