Eclipseがファイルからstdinを読み取ることは可能ですか?
System.inを1行のコードでリダイレクトできます。
System.setIn(new FileInputStream(filename));
System.setIn() を参照してください。
Eclipse 4.5以降では、起動構成ダイアログでSystem.inを設定してファイルから読み取ることができます。 こちらの発表 をご覧ください。
[更新]コメントで指摘されているように、この回答は誤解を招くものだったため、エラーを修正するために更新しました。 [/ 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を使用するかによって、スラッシュの方向を微調整する必要がある場合があります。
問題 !を修正した新しいEclipseバージョン、Eclipse 4.5(Mars)があります。
これは機能の発表と説明です: http://Eclipse.org/mars/noteworthy/#_assigning_stdin_to_a_file
Stdinは、起動構成ダイアログのCommonタブでファイルに割り当てることができるようになりました。
予想どおり、これはリリースされたばかりのEclipse 4.5の新機能であるため、古いバージョンでは機能しません。
実行ダイアログの「共通」タブの「標準入力および出力」の下に、「ファイル」のチェックボックスがあります。しかし、それは出力専用のようです...
私はそこに2つのファイルフィールドが表示されることを期待しています。1つは標準入力用、もう1つは追加オプション付きの標準出力用です。
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 ..メニューでプログラムの引数を設定する必要があります。
私にとっての解決策(Macで実行し、CアプリケーションにEclipse CDTを使用)は、「構成の実行」ダイアログの「引数」タブの他の引数の最後に「<path/to/somefile」を追加することでした。
また、これを確認してください 他の質問 中断状態でJavaプログラムを起動し、Eclipseを使用してデバッガーをアタッチすることに関する回答が必要です。
標準のEclipse Runダイアログを使用してそれを行う良い方法は見当たりません。ただし、外部ツールランチャーを使用して実行し、標準の「<infile」構文を使用するか、.bat/.shスクリプトを呼び出して実行できる場合があります。
これは自動化されていません。これは私が望むことですが、プログラムを起動するときにinfileの内容をEclipseコンソールにコピーアンドペーストできます。
< ${workspace_loc:/MyProject/file}
デバッグ構成/引数/プログラム引数:
私にとってはうまくいきます。
Linuxの場合:私が思うに、最も簡単な方法はshスクリプトを書くことです。
1)次のようにrun.shを記述します。
paramsを使用したプログラム <input.txt
2)Eclipseプロファイル構成で指定します
[タブメイン] C++ Run Application =/bin/sh
[タブ引数]プログラム引数= 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
ビルドファイル:${workspace_loc:/Tests/build.xml}
ベースディレクトリ:${workspace_loc:/Tests}
*注:Testsは、私のEclipseプロジェクトの名前です
[外部ツールバーを実行]ツールバーボタンをクリックしてプロジェクトを実行し、必要に応じて入力ファイルまたは出力ファイルを変更できます。