我无法弄清楚如何让命令行命令“cat”和我的微不足道的Java程序在Windows命令行中一起工作。 就像在Linux中常见的一样:
cat *.* | grep stackoverflow
我想在Windows中这样做:
cat inputfile.txt | java Boil
虽然我不能让猫喂养Boil。 正如你在下面看到的,命令行命令“cat”可以正常工作, 如果我以“java Boil these are parameters”的格式提供参数,Boil程序就可以正常工作。
我的Boil.java代码
// Boil down lines of input code to just ;{}( and ) // and enjoy seeing the patterns public class Boil { public static void main(String[] args) { int outputCounter = 0; for (int i = 0; i < args.length; i++) { for (int j = 0; j < args[i].length(); j++) { if (args[i].charAt(j) == ';' || args[i].charAt(j) == '(' || args[i].charAt(j) == ')' || args[i].charAt(j) == '{' || args[i].charAt(j) == '}') { System.out.print(args[i].charAt(j)); outputCounter++; if (outputCounter >= 80) { System.out.print("\n"); outputCounter = 0; } } } } } }
我知道这可以更好地优化:)
从我的C:\ Windows \ System32 \ cmd.exe中,在Windows 7 Professional SP1 32位操作系统的计算机上运行的“Administrator:cmd.exe”Windows命令行窗口:
Microsoft Windows [Version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. All rights reserved. C:\Windows\System32>cd ../../workspace1/Boil/bin C:\workspace1\Boil\bin>ls Boil.class inputfile.txt C:\workspace1\Boil\bin>cat inputfile.txt This is a sample text file() with { multiple lines!; } C:\workspace1\Boil\bin>java Boil this should print nothing C:\workspace1\Boil\bin>java Boil this should print a semicolon; ok? ; C:\workspace1\Boil\bin>java Boil test all good chars ;(){} ;(){} C:\workspace1\Boil\bin>cat inputfile.txt | java Boil C:\workspace1\Boil\bin>java Boil < inputfile.txt C:\workspace1\Boil\bin>java Boil < cat inputfile.txt The system cannot find the file specified. C:\workspace1\Boil\bin>cat inputfile.txt > java Boil cat: Boil: No such file or directory C:\workspace1\Boil\bin>dir Volume in drive C is OS Volume Serial Number is 0666-2986 Directory of C:\workspace1\Boil\bin 11/20/2013 04:29 PM <DIR> . 11/20/2013 04:29 PM <DIR> .. 11/20/2013 02:28 PM 864 Boil.class 11/20/2013 04:22 PM 57 inputfile.txt 11/20/2013 04:29 PM 57 java 3 File(s) 978 bytes 2 Dir(s) 872,764,809,216 bytes free C:\workspace1\Boil\bin>cat java This is a sample text file() with { multiple lines!; } C:\workspace1\Boil\bin>rm java
任何想法非常赞赏。 先谢谢你。
而不是试图读取行作为参数,你应该从标准输入流中读取。
try { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String input; while((input = br.readLine()) != null){ System.out.println(input); } } catch (IOException io){ io.printStackTrace(); }
管道意味着将输出流(STDOUT)作为STDIN传递给另一个命令。 在这个例子中,Boil和grep都没有任何参数。
如果你的命令是java Boil
,那么没有参数。 因此,循环中的任何代码都不会执行。 你试图让cat
命令把它的输出提供给命令的参数 ,但是你不能在Windows中这样做。 (使用|
在Unix / Linux上也不这样做,必须使用反引号来实现,但是Windows不支持反引号。
(PS你在Linux上的命令:
cat *.* | grep stackoverflow
没有做你认为它的事情。 在模式“ stackoverflow
”之后, grep
希望看到要搜索的文件的文件名,或者如果没有,则使用标准输入。 |
将cat
的输出管理到grep
的标准输入,而不是命令行参数。 你不能用这个来使用cat
的输出作为grep
的模式 [除非有一些方法可以使用-f
选项。