使用换行符重写Bash输入重定向

时间:2012-09-28 22:20:21

标签: java bash unit-testing input io-redirection

因此,对于在学校的任务,我需要在java中创建一个管理大学学生的程序,用户可以调用一些函数,但我开始测试'add'。

我的教授建议我使用输入重定向,因为我可以轻松地反复测试程序,而无需打字。现在问题就在于此。

echo `< input.txt`
add Student Name 123 Street,City,Province,Postal Code q
#Input rediraction ate my newlines
cat input.txt
add
Student Name
Street,City,Province,Postal Code
q
#What I actually want to run
java -cp . TestCollege < input.txt #fail horribly

正如你所看到的,bash删除了我用来分隔输入的换行符,因此我的程序崩溃了,因为当你以交互模式运行它时,Scanner.getLine()只会阻塞直到输入发生。

我知道如何使用换行符为我的程序提供输入,它似乎在windows“cmd”中工作正常,但在“bash”中却没有。

2 个答案:

答案 0 :(得分:1)

您可以尝试在BufferedInputStream周围包裹System.in,因为它可以处理两种情况:\r\n\n;而且我认为这就是你的问题所在。

或者更确切地说,在useDelimiter(System.getProperty("line.separator"))上致电Scanner

答案 1 :(得分:1)

好吧,你可以看到bash如何不吃新行“

$ wc -l < input.txt

我想这会给你你期望的价值。