java读取args[0]中的“*”作为参数。类文件
我希望程序中的一些代码仅在用户在命令行中输入字符“*”作为命令行参数时运行。这是我使用的代码:-
//myfile.java
import java.io.*;
public class myfile {
public static void main(String[] args) {
if(args[0].equals("*")){
//do stuff
System.out.println(args[0]);//added this line to see what exactly was being passed
}
}
}
在命令行上执行此程序时,输入:-
java myfile *
我希望在屏幕上看到的输出是星号字符,而显示的输出是“myfile”。阶级'。我哪里做错了?为什么Java会将星号改为。类文件? 另外,请注意,在我执行程序的前四次,然后开始执行时,程序运行得非常好
提前感谢你的帮助
# 1 楼答案
需要引用或转义星形字符。按如下方式运行java程序:
或
不是的,是你的壳在起作用。这是shell文件扩展。。。或者也被称为“全球化”
运行“ls*”或“echo*”,您将看到同样的情况发生
# 2 楼答案
命令终端已经替换了星号,java已经获得了您看到的值。我会使用对命令终端没有特殊意义的任何其他字符,否则必须在命令中转义星号
实际上是在Windows上转义参数,尤其是在cmd中。exe是不平凡的。这篇漂亮的文章对此进行了详细解释:Everyone quotes command line arguments the wrong way:
对于你的情况,最好的办法是:用引号将星号括起来
在评论中回答您的问题:
我不确定,但也许你会遇到这样的行为:模式是否可以扩展会产生不同。例如,当我将
Test*
作为参数传递时,有两种情况需要考虑:Test1.txt
的文件:然后java程序将Test1.txt
作为参数Test*
作为参数但是,我不确定这将如何应用于您的案例,因为您只传递
*
:这应该只在空目录中工作