web-dev-qa-db-ja.com

ファイルからstdin(System.in)を読み取るEclipse

Eclipseがファイルからstdinを読み取ることは可能ですか?

67
Kevin

Pure Java

System.inを1行のコードでリダイレクトできます。

System.setIn(new FileInputStream(filename));

System.setIn() を参照してください。

Eclipseの構成

Eclipse 4.5以降では、起動構成ダイアログでSystem.inを設定してファイルから読み取ることができます。 こちらの発表 をご覧ください。

Common tab of Launch Configuration dialog

58
Michael Myers

[更新]コメントで指摘されているように、この回答は誤解を招くものだったため、エラーを修正するために更新しました。 [/ Update]

Bashまたはコマンドプロンプトでは、次のことができます。C:\myprogramm < file.txt(Windows)または./myprogramm < file.txt(Linux)

残念ながら、Eclipseでは、stdinをEclipseのファイルにバインドするオプションがないため、同じ結果を達成することはできません。代わりに、コードでファイルストリームを手動で開き、代わりにそれから読み取る必要があります。これを行う1つの方法は、プログラム引数を使用して有効にする方法と、fileパラメーターを使用して有効にする方法です。プログラム引数配列から-dオプションを解析するために追加する必要があるコードの種類については、スコットの回答を参照してください。

Eclipseプロジェクト内のファイルをポイントする場合、場所を正しく取得し、$ {resource_loc:}変数を使用するように注意する必要があります。

-d ${resource_loc:/MyProject/file}

もちろん、絶対パスを置くこともできます:

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

Resource_locパラメーターは、ワークスペースを参照します。これは、Eclipseプロジェクトがすべて保存されるフォルダーです。そこから、プロジェクトフォルダーを参照してから、ロードするファイルを参照する必要があります。

Linuxを使用するかWinodwsを使用するかによって、スラッシュの方向を微調整する必要がある場合があります。

12
lanoxx

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の新機能であるため、古いバージョンでは機能しません。

10
Petr Janeček

実行ダイアログの「共通」タブの「標準入力および出力」の下に、「ファイル」のチェックボックスがあります。しかし、それは出力専用のようです...

私はそこに2つのファイルフィールドが表示されることを期待しています。1つは標準入力用、もう1つは追加オプション付きの標準出力用です。

8
John Gardner

Eclipse内でこれを機能させるには、コードを微調整する必要があります。私が試みたとき、上記の他の答えはうまくいきませんでした。別の[実行]を変更するように言ったのを見ました。[共通]タブ> [標準入力および出力]> [ファイル]では、入力ではなく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);
    }

this answerで説明されているように、Run ..メニューでプログラムの引数を設定する必要があります。

6
Scott

私にとっての解決策(Macで実行し、CアプリケーションにEclipse CDTを使用)は、「構成の実行」ダイアログの「引数」タブの他の引数の最後に「<path/to/somefile」を追加することでした。

また、これを確認してください 他の質問 中断状態でJavaプログラムを起動し、Eclipseを使用してデバッガーをアタッチすることに関する回答が必要です。

5
Stewart Stevens

標準のEclipse Runダイアログを使用してそれを行う良い方法は見当たりません。ただし、外部ツールランチャーを使用して実行し、標準の「<infile」構文を使用するか、.bat/.shスクリプトを呼び出して実行できる場合があります。

これは自動化されていません。これは私が望むことですが、プログラムを起動するときにinfileの内容をEclipseコンソールにコピーアンドペーストできます。

4
KC Baltz
< ${workspace_loc:/MyProject/file}

デバッグ構成/引数/プログラム引数:

私にとってはうまくいきます。

3
Vlad

Linuxの場合:私が思うに、最も簡単な方法はshスクリプトを書くことです。

1)次のようにrun.shを記述します。

paramsを使用したプログラム <input.txt

2)Eclipseプロファイル構成で指定します

[タブメイン] C++ Run Application =/bin/sh

[タブ引数]プログラム引数= run.sh

それでおしまい。プロジェクトを実行すると、Eclipseコンソールにスクリプトの出力が表示されます。 Windowsでも同様のことができます。

2

これは驚くべきことにEclipseではサポートされておらず、追加する予定は現在ないようです。フォローして投票するには、 https://bugs.Eclipse.org/bugs/show_bug.cgi?id=155411 を参照してください。

彼らがそれを実装するならば、私はここで更新します。

1
studgeek

私がしたことは、Antターゲットを作成し、Eclipseから「外部実行」として起動することでした。手順は次のとおりです。

  • 読み込む入力ファイルが1つあります: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}

*注:Testsは、私のEclipseプロジェクトの名前です

[外部ツールバーを実行]ツールバーボタンをクリックしてプロジェクトを実行し、必要に応じて入力ファイルまたは出力ファイルを変更できます。

0
drverboten