Java 为什么我在从命令行创建JAR文件时会得到这种奇怪的输出?

Java 为什么我在从命令行创建JAR文件时会得到这种奇怪的输出?,java,command-line,jar,command-line-arguments,executable-jar,Java,Command Line,Jar,Command Line Arguments,Executable Jar,我在文件夹“D:\Workspace\Workspace\Packaging Programs into JAR Files\src”中编写了一个HelloWorld类。我正在尝试创建一个包含以下HelloWorld.class文件的Jar文件。因此,我在src目录中打开cmd并执行以下命令 jar cv HelloWorld.jar HelloWorld.class 我明白了: D:\Workspaces\Workspace\Packaging Programs i nto JAR File

我在文件夹“D:\Workspace\Workspace\Packaging Programs into JAR Files\src”中编写了一个HelloWorld类。我正在尝试创建一个包含以下HelloWorld.class文件的Jar文件。因此,我在src目录中打开cmd并执行以下命令

jar cv HelloWorld.jar HelloWorld.class
我明白了:

D:\Workspaces\Workspace\Packaging Programs i
nto JAR Files\src>jar cv HelloWorld.jar HelloWorld.class
HelloWorld.jar : no such file or directory
 δ╗£H                    ♦ META-INF/■╩  ♥     ☻       PK♥ δ╗£H            ¶   ME
K-*╬╠╧│R0╘3ασr.JM,IM╤u¬♦        ÿδ↓─¢[*h°↨%&τñ*8τ↨§Σ↨%û òk≥r±r☺ P╖îqëC   D   PK♥
 c╖£H            ►   HelloWorld.classmPMK├@►}█|515╡╡⌡│P☼B¶1ŧ/éx(*D⌠α)iù▓%╔JL¶⌂û
▲¶<°♥ⁿQΓl¶é╨à▌Ö}≤▐╠█²·■°♦päü♥‼₧ì6VÜΦ8Φb╒B╧Bƒ┴<▬Ö(N↑4⌂∩åA?òS╬αìE╞/╩4µ∙u¶'äΦi$2å╛⌂
7₧GÅQÉD┘ï\d│æ↕:í,≤      ?‼è∞¥≤$æ╖2Oªçèφ┬B╙┬Üïul0┤¬≥┴≡I◄v,l║╪┬6⌡¿e♀φz╠e<τôΓ▼¶>?¶<
┌d∟♀6e♥èîó▒*♫÷B ↓ª╙¼@EYé√G▌%⌐BφW4:┌←⌠ÜεT]5Ω¬‼╥¬ª,* P♥   èY!☺  ⌐☺  PK δ╗£H    ☻
         ♦               META-INF/■╩  PK☺☻¶ δ╗£H╖îqëC   D   ¶             =   ME
TA-INF/MANIFEST.MFPK☺☻¶ c╖£H♥   èY!☺  ⌐☺  ►             ┬   HelloWorld.classPK♣♠
    ♥ ♥ ╗   !☻
D:\Workspaces\Workspace\Packaging Programs i
nto JAR Files\src>
D:\Workspace\Workspace\Packaging Programs i
nto JAR Files\src>JAR cv HelloWorld.JAR HelloWorld.class
HelloWorld.jar:没有这样的文件或目录
δ╗英镑♦ META-INF/■╩  ♥     ☻       主键♥ δ╗H¨ME
K-*╬╠╧│R0╘3ασr.JM,IM╤你♦        ÿδ↓─■[*h°↨%&τñ*8τ↨§Σ↨%òk≥r±r☺ P╖îqëC D PK♥
C╖英镑►   HelloWorld.classmPMK├@►}█|515╡╡⌡│P☼B¨1ŧ/x(*D)⌠α) iù▓%╔JL∗⌂û

▲¨您缺少
-f
参数,该参数告诉JAR工具输出到文件而不是控制台:

jar cvf HelloWorld.jar HelloWorld.class
更新:

通过告诉JAR将输出发送到标准输出,然后重定向到所需的实际JAR文件,您可以在不使用
-f
标志的情况下获得与上述相同的结果。因此,以下操作将实现与上述相同的效果:

jar cv HelloWorld.class > HelloWorld.jar

需要注意的是,将输出从JAR传输到输出文件是操作系统的一项功能,而不是Java的一项功能。

您缺少了
-f
参数,该参数告诉JAR工具输出到文件而不是控制台:

jar cvf HelloWorld.jar HelloWorld.class
更新:

通过告诉JAR将输出发送到标准输出,然后重定向到所需的实际JAR文件,您可以在不使用
-f
标志的情况下获得与上述相同的结果。因此,以下操作将实现与上述相同的效果:

jar cv HelloWorld.class > HelloWorld.jar

需要注意的是,将JAR的输出管道化到输出文件中是操作系统的一项功能,而不是Java的一项功能。

它应该是
JAR cf
,而不是
JAR cv
。为什么要将JAR存档输出到system out?f使其写入的文件就是JAR。通过键入
JAR cv
而不是
JAR cfe> ,您告诉它通过命令提示符输出jar的内容,而不是将其写入文件。因为它不是以明文显示的,所以当您告诉计算机以这种方式显示它时,您得到了混乱的字符。jar命令行工具是有意的(我相信)用于创建JAR文件。如果您想通过管道将JAR文件传输到其他输出流,那么从Java程序执行该操作相当容易。没问题。很高兴我能提供帮助!应该是
JAR cf
,而不是
JAR cv
。为什么要将JAR存档输出到system out?f使其写入的文件就是JAR。通过键入
JARcv
而不是
jar cf
,您告诉它通过命令提示符输出jar的内容,而不是将其写入文件。因为它不是以明文显示的,所以当您告诉计算机以这种方式显示它时,您得到了混乱的字符。jar命令行工具是有意的(我相信)用于创建JAR文件。如果您想通过管道将JAR文件传输到其他输出流,那么从Java程序执行该操作相当容易。没问题。很高兴我能提供帮助!谢谢您的回答。但是从我在问题中链接的文档中,“f选项表示您希望输出到文件而不是标准输出。”-但是,如果我不关心文件,并且确实希望输出进入输出流,该怎么办?我正在学习,希望分别尝试每个选项,以便我能很好地理解。谢谢你的回答。但是从我在问题中链接的文档中,“f选项表示您希望输出进入文件,而不是标准输出。”-但是,如果我不关心文件,并且确实希望输出进入输出流,该怎么办?我正在学习,希望分别尝试每个选项,以便更好地理解它。