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 и изменив входные или выходные файлы, как вам нужно

Другие вопросы по тегам