通用
- Java Runtime下,
java program *
表示将当前目录下的所有文件作为参数传递给程序program
cmd命令行
一、运行一个类
- 在运行前确定该类是主类,且该主类存在(已通过同名.java文件编译)
1.运行主类的典型语法
java [ <options> ] <class-name> [<arg> ...]
options
是命令行选项(以“-”字符开头);class-name
通常,特别是声明了类的包所属关系时,必须是 完全限定名称(fully-qualified-name),即:packagename.packagename2.ClassName
;有些版本也可以写作packagename2/packagename3/ClassName
,但这不是目录
2.无法找到该主类的原因
- 类名输入有误
- 只输入类名,没有其包所属关系;
- 类的完全限定名称混入了包外的目录
- 带上了
.class
后缀 - 类名的大小写不正确
- 运行的是
.java
文件 (java 11
及后版本没有此问题)
3. 该类参数的格式
- 如果要以一个文件及其路径名作为字符串参数(例如需要传递该字符串进而创建
File
对象),要注意IDEA和cmd命令行的工作目录是不同,导致传递的路径名也不同- 对于IDEA,工作目录是
/IDEA-workspace
,因此建立File
所需要的字符串路径是src/../file.txt
; - 对于cmd命令行,工作目录取决于当前进入的目录
如果
.class
在编译前声明了包所属关系,那当运行在src/packagename/
文件夹下的.class
文件,需要退出到这个包文件夹外,例如src/..
但接下来,若把文本文件放在packagename/
文件夹下,即和该.class
文件同目录,传递text.txt
作为参数时,提示无法找到该文本;如果把文本文件放到packagename/
外,即cmd的工作目录src/
下,传递packagename/text.txt
作为参数,依然无法找到该文本。 又尝试没有包所属关系的.class
文件,纯粹将其和文本文件放在一起,且仅以文件名text.txt
作为参数,可以运行。 因此,目前遇到需要cmd命令行运行的情况,撇清包所属关系,并把文本文件放在一起。
- 对于IDEA,工作目录是