如何在Java中处理终端输入参数中的"<"符号
解决Java程序读取命令行参数时的重定向符号问题
嘿,我来帮你搞明白这个问题~
首先得掰扯清楚为啥Eclipse和控制台运行时args.length不一样:
- 在控制台里,
<是操作系统shell的重定向符号,它的作用是把file.txt的内容直接作为程序的标准输入,而不是把<和file.txt当作参数传给Java程序。所以你运行java MyClass -x < file.txt时,只有-x会被放进args数组里,args.length自然是1。 - 但在Eclipse里,你是把
-x < file.txt直接填到程序参数里的,Eclipse不会解析shell的重定向规则,只会把空格分隔的三个字符串-x、<、file.txt都当作命令行参数传给程序,所以args.length是3。
接下来分两种场景给你解决方案:
场景1:你想通过重定向读取文件内容(控制台的运行逻辑)
如果你的需求是让程序读取file.txt里的内容,那根本不需要从args里拿文件名,直接通过System.in读取标准输入就行,比如用Scanner实现:
import java.util.Scanner; public class MyClass { public static void main(String[] args) { System.out.println("参数数量:" + args.length); // 控制台运行时输出1,只有"-x" String param1 = args[0]; // 获取"-x"参数 // 读取重定向过来的文件内容 Scanner inputScanner = new Scanner(System.in); System.out.println("文件内容:"); while (inputScanner.hasNextLine()) { String line = inputScanner.nextLine(); System.out.println(line); } inputScanner.close(); } }
要是想在Eclipse里模拟这种重定向效果,别把< file.txt写进程序参数,而是去运行配置的「标准输入和输出」里,选择「文件」并指定file.txt作为输入源就行。
场景2:你想把文件名当作命令行参数传入
如果你的需求是让程序接收-x和file.txt作为参数(而不是用重定向),那直接去掉<符号,运行命令改成java MyClass -x file.txt就行。不管在Eclipse还是控制台,args.length都会是2,你可以直接从args里拿到文件名,然后读取文件:
import java.io.File; import java.util.Scanner; public class MyClass { public static void main(String[] args) { System.out.println("参数数量:" + args.length); // 这里输出2 String param1 = args[0]; // "-x" String fileName = args[1]; // "file.txt" // 根据文件名读取文件内容 try { Scanner fileScanner = new Scanner(new File(fileName)); System.out.println("文件内容:"); while (fileScanner.hasNextLine()) { String line = fileScanner.nextLine(); System.out.println(line); } fileScanner.close(); } catch (Exception e) { System.err.println("读取文件出错:" + e.getMessage()); e.printStackTrace(); } } }
内容的提问来源于stack exchange,提问作者zeroSoCreative
相关产品推荐
相关产品推荐

