Чтение Eclipse stdin (System.in) из файла

Возможно ли, чтобы Eclipse считывал stdin из файла?

Ответ 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 можно назначить файлу на вкладке Обычнаяконфигурации. enter image description here

Как и ожидалось, это новая функция только что выпущенного 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 на панели инструментов и изменив входные или выходные файлы по мере необходимости