簡體   English   中英

Eclipse從文件中讀取stdin(System.in)

[英]Eclipse reading stdin (System.in) from a file

Eclipse是否可以從文件中讀取stdin?

純Java

您可以使用一行代碼重定向System.in:

System.setIn(new FileInputStream(filename));

請參見System.setIn()

Eclipse配置

在Eclipse 4.5或更高版本中,啟動配置對話框可以將System.in設置為從文件中讀取。 請參閱此處的公告

啟動配置對話框的常用選項卡

[更新]正如評論中指出的那樣,這個答案有誤導性,所以我更新了它以糾正錯誤。 [/更新]

在bash或命令提示符下,您可以執行以下操作: C:\\myprogramm < file.txt (Windows)或./myprogramm < file.txt (Linux)

不幸的是,在Eclipse中不可能實現相同的結果,因為沒有選項將stdin綁定到eclipse中的文件。 相反,您必須在代碼中手動打開文件流,然后從中讀取。 一種方法是使用程序參數啟用它,另一個使用file參數。 請參閱Scott的答案,了解需要添加哪種代碼來解析程序參數數組中的-d選項。

當您想要指向Eclipse項目中的某個文件時,您需要小心地獲取正確的位置並使用$ {resource_loc:}變量:

-d ${resource_loc:/MyProject/file}

當然你也可以放一條絕對路徑:

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

resource_loc參數指向您的工作區。 這是存儲所有eclipse項目的文件夾。從那里你仍然需要引用你的項目文件夾,然后是你想要加載的文件。

您可能需要調整斜杠方向,具體取決於您是使用Linux還是Winodws。

2015年更新

有一個新的Eclipse版本Eclipse 4.5(Mars)修復了這個問題

這是該功能的公告和說明: http//eclipse.org/mars/noteworthy/#_assigning_stdin_to_a_file

現在可以將Stdin分配給啟動配置對話框的“ 公用”選項卡中的文件。 在此輸入圖像描述

正如所料,這是剛剛發布的eclipse 4.5的一個新功能,因此不適用於舊版本。

在運行對話框的“公共”選項卡上,在“標准輸入和輸出”下面有一個“文件”復選框。 但它似乎只是為了輸出......

我希望在那里看到2個文件字段,一個用於標准輸入,一個用於標准輸出和附加選項。

您將需要調整一些代碼以使其在eclipse中工作。 當我嘗試時,上面的其他答案不起作用。 另一個我見過要更改Run ..> Common選項卡> Standard Input and Output> File只將stdout行為更改為文件,而不是輸入。

解決方案是將“-d”選項用於可行的解決方案。 如果你在程序參數中放入任何東西,它就會被傳遞到你的main中。 那么你在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應用程序)的解決方案是在“運行配置”對話框的“參數”選項卡中的其他參數的末尾添加“<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配置文件配置中指定

[tab Main] C ++ Run Application = / bin / sh

[tab Arguments] Program Arguments = run.sh

而已。 當您運行項目時,您將在eclipse控制台中看到腳本的輸出。 您可以在Windows中執行類似的操作。

令人驚訝的是,這在Eclipse中並不受支持,似乎目前沒有計划添加它。 請參閱https://bugs.eclipse.org/bugs/show_bug.cgi?id=155411進行跟進並投票。

我會在這里更新,如果他們確實實現了它。

我做的是創建一個Ant目標並從Eclipse啟動它作為“Run External”,以下是步驟:

  • 我有一個輸入文件可供讀取: 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/build.xml}

基本目錄: ${workspace_loc:/Tests}

*注意:測試是我的Eclipse項目的名稱

現在,您可以通過單擊Run Extenal工具欄按鈕來運行項目,並根據需要更改輸入或輸出文件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM