如何使用bash将文件重定向为Java程序的输入?
我的代码大致如下所示:如何使用bash将文件重定向为Java程序的输入?,java,bash,Java,Bash,我的代码大致如下所示: InputStreamReader isReader = new InputStreamReader(System.in); BufferedReader bufReader = new BufferedReader(isReader); while (true) { try { String inputStr = null; if ((inputStr=bufReader.readLine()) != null) {
InputStreamReader isReader = new InputStreamReader(System.in);
BufferedReader bufReader = new BufferedReader(isReader);
while (true) {
try {
String inputStr = null;
if ((inputStr=bufReader.readLine()) != null) {
//DO SOMETHING
}
else {
System.out.println("input is null");
}
}
catch (Exception e) {
//DO SOMETHING
}
}
当我跑的时候
java-classpath../src test.TestProgram
它可以很好地处理文件中的第一行,但它会一直打印输入为null
,并且从不转到第二行
我如何修改我的程序,告诉它让错误输入转到下一行
PS:我需要处理的文件如下:
111111
111111112
111111113
...
我试过了
java -classpath ../src test.TestProgram < filename
echo `cat filename` | java -classpath ../src test.TestProgram
java -classpath ../src test.TestProgram <<< `cat filename`
java-classpath../src test.TestProgram java-classpath../src test.TestProgram java-classpath../src test.TestProgram
public static void main(String[] args) {
InputStreamReader isReader = new InputStreamReader(System.in);
BufferedReader bufReader = new BufferedReader(isReader);
while (true) {
try {
String inputStr = null;
if ((inputStr = bufReader.readLine()) != null) {
System.out.println(inputStr);
} else {
System.out.println("input is null");
return; //end on first null
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
我运行:
java Test.java < data.txt
您是如何制作输入文件的?也许你的行尾是非标准的
下面是您的代码,经过了一些清理:
public static void main(String[] args) {
BufferedReader bufReader = new BufferedReader(new InputStreamReader(System.in));
String inputStr = null;
try {
while ((inputStr = bufReader.readLine()) != null) {
System.out.println(inputStr);
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("end of file");
}
您的代码实际上很好,它在MacOSXJava1.6.0上对我有效。我做了一些小改动:
public static void main(String[] args) {
InputStreamReader isReader = new InputStreamReader(System.in);
BufferedReader bufReader = new BufferedReader(isReader);
while (true) {
try {
String inputStr = null;
if ((inputStr = bufReader.readLine()) != null) {
System.out.println(inputStr);
} else {
System.out.println("input is null");
return; //end on first null
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
我运行:
java Test.java < data.txt
您是如何制作输入文件的?也许你的行尾是非标准的
下面是您的代码,经过了一些清理:
public static void main(String[] args) {
BufferedReader bufReader = new BufferedReader(new InputStreamReader(System.in));
String inputStr = null;
try {
while ((inputStr = bufReader.readLine()) != null) {
System.out.println(inputStr);
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("end of file");
}
不是直接的答案,但是FYI readLine()在到达原始输入的结尾时返回null,因此一旦返回null,它将始终返回null。因为我仍然希望我的java项目接受命令行输入,我不希望将源从System.in更改为FileNull返回null表示已到达原始文件的结尾。你不能同时使用“in C++”,当遇到错误输入时,CIN会升起一个标志,当你做CIN。CULL()和CIN。IGRANE()时,CIN就准备好了后续输入。我们在Java中有类似的东西吗?我不知道“输入错误”是什么意思。每次对readline的调用都将返回所有字节,但不包括换行符/回车符。如果在创建读卡器时选择了字符集,找到的字节无法正确解析,则会出现异常。这不是直接答案,但一旦到达原始输入的末尾,FYI readLine()将返回null,因此,一旦它返回null,它将始终返回null。因为我仍然希望我的java项目接受命令行输入,我不想将源代码从System.in更改为file返回null意味着原始文件的结尾已经到达。你不能同时使用“in C++”,当遇到错误输入时,CIN会升起一个标志,当你做CIN。CULL()和CIN。IGRANE()时,CIN就准备好了后续输入。我们在Java中有类似的东西吗?我不知道“输入错误”是什么意思。每次对readline的调用都将返回所有字节,但不包括换行符/回车符。唯一一次出现异常的情况是,如果在创建读卡器时选择的字符集未正确解析找到的字节。我的错。。。我将“BufferedReader bufReader=new BufferedReader(new InputStreamReader(System.in))”放入循环中。。。塔克斯!我的错。。。我将“BufferedReader bufReader=new BufferedReader(new InputStreamReader(System.in))”放入循环中。。。塔克斯!