gpt4 book ai didi

java - 停止将命令行参数中的通配符扩展到 Java

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:09:46 24 4
gpt4 key购买 nike

我的程序必须监视匹配掩码的文件。文件夹名称和掩码通过命令行参数传递。但是面具在我可以使用之前被第一场比赛取代!

双引号无效,其他符号也无效。我尝试使用 \' 来保护输入。然而,这个符号将被添加到我不想要的参数中。知道如何解决它吗?

public static void main(String[] args) throws IOException {
File dir = new File(args[0]);
String mask = args[1];
System.out.println(dir.getAbsolutePath());
System.out.println(mask);
String regex = args[2];
System.out.println(regex);
}

args[2] 中的正则表达式也替换为文件夹中的一些文件。

Input: "E:\Programming\Java\Task7" *.??? ...
Ouput: E:\Programming\Java\Task7 .git Task7.iml

Input: "E:\Programming\Java\Task7" *.????* [a-zA-Z]
Output: E:\Programming\Java\Task7 .idea [a-zA-Z]

Input: "E:\Programming\Java\Task7" '.???' ...
Output: E:\Programming\Java\Task7 '.???' ...

Input: "E:\Programming\Java\Task7" \\'.???'\\ ...
Output: E:\Programming\Java\Task7 \'.???'\ ...

我知道使用引号或反斜杠不是什么坏主意,但我认为存在更好的方法。

最佳答案

背景:在 Linux 上,扩展命令参数中通配符的不是 Java。 shell java 命令启动之前执行此操作

阻止 shell 扩展通配符的方法是引用参数。如何执行此操作取决于您使用的 shell。


现在是 Windows 案例……这才是您真正要问的问题。

据我所知,标准的“cmd.exe”shell(在其各种版本/风格中)不进行通配符扩展。由应用程序在临时基础上进行(或不进行)扩展。

显然,这对于 Java“一次编写,到处运行”的理念来说是有问题的,因此 Java 设计者试图让命令行参数中的通配符在 Windows 上像在 Unix 和 Linux 上一样工作。但不幸的是,他们不能完美地完成这项工作……因此出现了这种异常情况。

然而,根据this page , 在参数周围放置双引号 告诉 Java 不要进行通配符扩展。

但如果这没有帮助,您可能就不走运了。


以下是有关此主题的 Oracle 文档的一些链接,摘自 Oracle Java 错误报告 #5036373 :

Java Wildcard expansion on Windows platform has been documented. See the following links:

http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html

http://docs.oracle.com/javase/7/docs/technotes/tools/windows/classpath.html

Wildcard expansion does not work in a Windows command shell for a single element classpath due to the Microsoft bug described in: http://connect.microsoft.com/VisualStudio/feedback/details/98756/vs2005-setargv-obj-wildcard-handling-broken.

The limitations are also mentioned in 7u10 release notes: http://www.oracle.com/technetwork/java/javase/7u10-relnotes-1880995.html

但是,我认为写这篇文章的 Oracle 员工故意变得迟钝,因为通常通配符扩展显然没有记录在那些“手册”页面中。他们只在 -cp 参数中谈论通配符扩展。

关于java - 停止将命令行参数中的通配符扩展到 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25948706/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com