Затмение чтения stdin (System.in) из файла - PullRequest
67 голосов
/ 09 октября 2008

Возможно ли для Eclipse читать stdin из файла?

Ответы [ 11 ]

58 голосов
/ 09 октября 2008

Чистая Ява

Вы можете перенаправить System.in одной строкой кода:

System.setIn(new FileInputStream(filename));

См. System.setIn () .

Eclipse config

В Eclipse 4.5 или более поздней версии диалоговое окно конфигурации запуска может настроить System.in для чтения из файла. См объявление здесь .

Common tab of Launch Configuration dialog

12 голосов
/ 14 мая 2011

[Обновление] Как было указано в комментариях, этот ответ вводил в заблуждение, поэтому я обновил его, чтобы исправить ошибки. [/ Update]

В bash или командной строке вы можете сделать: C:\myprogramm < file.txt (Windows) или ./myprogramm < file.txt (Linux)

К сожалению, в Eclipse невозможно достичь того же результата, поскольку в eclipse нет возможности привязать stdin к файлу. Вместо этого вам придется вручную открыть поток файлов в вашем коде, а затем читать из него. Один из способов сделать это - использовать программный аргумент, чтобы включить его, а другой - с параметром file. См. Ответ Скотта о том, какой код нужно добавить для анализа опции -d из массива аргументов программы.

Если вы хотите указать на какой-то файл внутри вашего проекта Eclipse, вам нужно быть осторожным, чтобы правильно определить местоположение и использовать переменную $ {resource_loc:}:

-d ${resource_loc:/MyProject/file}

Конечно, вы также можете указать абсолютный путь:

-d path/to/file or -d C:\path\to\file

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

Возможно, вам придется изменить направление косой черты, в зависимости от того, используете ли вы Linux или Winodws.

10 голосов
/ 08 июля 2015

2015 обновление

Существует новая версия Eclipse, Eclipse 4.5 (Mars), которая исправила проблему !

Это объявление и описание функции: http://eclipse.org/mars/noteworthy/#_assigning_stdin_to_a_file

Stdin теперь можно назначить файлу на вкладке Common запуска диалоги конфигурации. enter image description here

Как и ожидалось, это новая функция только что выпущенного eclipse 4.5 и поэтому не будет работать в более старой версии.

8 голосов
/ 09 октября 2008

На вкладке «Общие» диалогового окна «Выполнить» в разделе «Стандартный ввод и вывод» установлен флажок «Файл». но, похоже, только для вывода ...

Я бы ожидал увидеть там 2 файловых поля, одно для стандартного входа, одно для стандартного выхода с опциями добавления.

6 голосов
/ 09 июня 2012

Вам нужно будет немного подправить свой код, чтобы это работало в затмении. Другие ответы выше не работали, когда я пытался. Еще я видел высказывание об изменении «Выполнить».> Вкладка «Общие»> «Стандартный ввод и вывод»> «Файл» изменило только поведение 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 .., как описано в this answer.

5 голосов
/ 18 мая 2011

Решение для меня (работа на Mac и использование Eclipse CDT для приложения на C) заключалась в добавлении «

Также проверьте этот другой вопрос для ответа, включающего запуск программы Java в приостановленном состоянии и затем присоединение отладчика с помощью Eclipse.

4 голосов
/ 09 октября 2008

Я не вижу хорошего способа сделать это, используя стандартный диалог Eclipse Run. Однако вы можете сделать это с помощью внешнего средства запуска инструментов и либо использовать стандартный синтаксис «

Это не автоматизировано, что, как я предполагаю, вам нужно, но вы можете копировать и вставлять содержимое своего infile в консоль Eclipse при запуске вашей программы.

3 голосов
/ 03 июня 2012
< ${workspace_loc:/MyProject/file}

в конфигурации отладки / аргументах / аргументах программы:

хорошо работает для меня.

2 голосов
/ 04 ноября 2013

Для Linux: Я думаю, что самый простой способ - написать sh-скрипт.

1) напишите run.sh так:

ваша программа с параметрами

2) В конфигурации профиля Eclipse укажите

[tab Main] C ++ Запустить приложение = / bin / sh

[tab Arguments] Программные аргументы = run.sh

Вот и все. Когда вы запустите свой проект, вы увидите вывод скрипта в консоли eclipse. Вы можете сделать что-то подобное в Windows.

1 голос
/ 10 марта 2013

Это неожиданно не поддерживается в Eclipse, и, похоже, в настоящее время нет планов его добавления. См. https://bugs.eclipse.org/bugs/show_bug.cgi?id=155411, чтобы подписаться и проголосовать.

Я обновлю здесь, если они это реализуют.

...