类UNIX系统中java -jar命令重定向输入失效问题求助
解决Java JAR文件重定向输入被忽略的问题
嘿,我之前也碰到过类似的麻烦,咱们一步步来排查和解决这个问题:
1. 确认程序是否正确读取标准输入(stdin)
重定向符号 < 的作用是把文件内容传入程序的标准输入流,如果你的Java程序根本没从System.in读取输入,那这个重定向自然会被忽略。
检查你的代码逻辑:
- 是不是用了
Scanner scanner = new Scanner(System.in);来读取输入? - 或者用
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));?
如果你的程序是从命令行参数(args数组)读取输入,那重定向肯定无效——得改成读取标准输入才行。
举个简单的正确读取stdin的示例代码:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNextLine()) { String line = scanner.nextLine(); System.out.println("读取到内容:" + line); } scanner.close(); } }
2. 检查输入文件的路径与权限
- 先确认
inputfile.txt在当前命令行的工作目录下:可以用ls(Linux/macOS)或dir(Windows)查看当前目录的文件列表。 - 如果文件不在当前目录,要写完整的相对路径或绝对路径,比如
./data/inputfile.txt或者C:\users\yourname\inputfile.txt。 - 另外,确保你有读取这个文件的权限,比如Linux下用
chmod +r inputfile.txt赋予读权限。
可以先测试文件本身是否可读:用cat inputfile.txt(Linux/macOS)或type inputfile.txt(Windows)命令,如果能正常输出文件内容,说明文件没问题。
3. 尝试用管道替代重定向
如果是shell环境对重定向符号处理有问题,可以试试用管道的方式传递输入:
- Linux/macOS:
cat inputfile.txt | java -jar mysolution.jar - Windows:
type inputfile.txt | java -jar mysolution.jar
这种方式和重定向的效果是一样的,但有时候能避开某些shell的兼容性问题。
4. 检查JAR包的主类配置
确保你的JAR包的MANIFEST.MF文件里,Main-Class属性指定的是正确的主类——也就是包含读取输入逻辑的那个类。如果主类配错了,运行的可能是另一个不处理输入的类,自然会忽略重定向的内容。
内容的提问来源于stack exchange,提问作者Zinzilla
相关产品推荐
相关产品推荐

