常用的Windows Dos命令
cd → 指定目录
cd.. → 返回上级目录
cd/ → 返回到根目录
dir → 列出当前目录下的所有文件夹和文件
md → 创建目录
rd → 删除目录
del → 删除目录下的所有文件(子目录的文件不会被删除)
ren → 重命名
copy → 复制文件
javac、java命令
java文件存放目录:
D:\workspace\src\com\test\HelloWorld.java
编译运行:
D:\workspace\src\com\test>javac HelloWorld.java
D:\workspace\src\com\test>java HelloWorld以上是最简单的javac、java的命令。
另外,javac可以指定相对路径和绝对路径,以下两种javac命令都是可以的:
D:\>javac workspace\src\com\test\HelloWorld.java
D:\>javac d:\workspace\src\com\test\HelloWorld.java
运行的时候不是指定路径,而是指定包名(前提是已经为HelloWorld.java指定了包名,并且文件夹的结构也要和包名一致):
D:\workspace\src>java com.test.HelloWorld
-sourcepath、-classpath
-sourcepath:指定.java文件,可以是目录、jar文件、zip文件,指定多个可以用分号隔开
-classpath(-cp):指定.class文件,可以使目录、jar文件、zip文件,指定多个可以用分号隔开(如果没有指定classpath,则使用系统环境变量中的classpath)
有以下两个java文件(HelloWorld.java中有对Student的引用)
D:\workspace\src\com\test\HelloWorld.java
D:\workspace\src\com\test\entity\Student.java
如果直接编译的话(D:\workspace\src>javac com\test\HelloWorld.java)会报错,原因是没有指定引用的类。
解决方法1(指定classpath):
D:\workspace\src>javac com\test\entity\Student.java
D:\workspace\src>javac -classpath com\test\entity com\test\HelloWorld.java
(运行的时候classpath要加分号:D:\workspace\src>java -classpath com\test\entity; com.test.HelloWorld)
解决方法2(指定sourcepath):
D:\workspace\src>javac -sourcepath com\test\entity com\test\HelloWorld.java
解决方法3(同时指定sourcepath和classpath):
D:\workspace\src>javac -classpath com\test\entity -sourcepath com\test\entity com\test\HelloWorld.java
编译器首先会判断Student.class和Student.java是否同时存在,如果单独存在,则适应其中之一,如果同时存在,则判断Student.class是不是Student.java的最新版本,如果不是最新版本,则重新编译。
同时编译多个java文件
有两种方法:
1、如果文件都在同一目录
假设有四个文件:HelloWorld1.java、HelloWorld2.java、HelloWorld3.java、HelloWorld4.java
那么可以这么写:javac HelloWorld*.java或者javac *.java
2、如果文件不在同一目录
假设有四个文件:HelloWorld1.java、HelloWorld2.java、HelloWorld3.java、HelloWorld4.java。它们分别在1、2、3、4这四个文件夹里面
那么可以先建一个文件(FilesList.txt)在D盘,然后在此文件里面添加如下内容
D:\1\HelloWorld1.java
D:\2\HelloWorld2.java
D:\3\HelloWorld3.java
D:\4\HelloWorld4.java
然后直接输入命令javac @FilesList.txt
将.java文件和.class分开
如果直接用javac HelloWorld.java,那么编译后的HelloWorld.class和HelloWorld.java在同一目录下,那么,怎么让它们不在同一目录下呢?
使用-d指定目录(-d的目录不会自动创建,要手动创建):
D:\workspace> javac -sourcepath src\com\test -classpath classes \src\com\test\*.java -d classes
让.class按照包的目录结构存放:
假设D:\java\Test.java的包定义是:package com.test;
编译:D:\java>javac Test.java -d .\(编译之后Test.class被放到了D:\java\com\test中去了,和上面的不同,这里的目录是自动创建的)
运行:D:\java>java com.test.Test
jar命令
用法: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
选项包括:
-c 创建新的归档文件
-t 列出归档目录
-x 解压缩已归档的指定(或所有)文件
-u 更新现有的归档文件
-v 在标准输出中生成详细输出
-f 指定归档文件名
-m 包含指定清单文件中的清单信息
-e 为捆绑到可执行 jar 文件的独立应用程序指定应用程序入口点
-0 仅存储;不使用任何 ZIP 压缩
-M 不创建条目的清单文件
-i 为指定的 jar 文件生成索引信息
-C 更改为指定的目录并包含其中的文件
如果有任何目录文件,则对其进行递归处理。
清单文件名、归档文件名和入口点名的指定顺序
与 "m"、"f" 和 "e" 标志的指定顺序相同。
示例 1:将两个类文件归档到一个名为 classes.jar 的归档文件中:
jar cvf classes.jar Foo.class Bar.class
示例 2:使用现有的清单文件 "mymanifest" 并将 foo/ 目录中的所有文件归档到 "classes.jar" 中:
jar cvfm classes.jar mymanifest -C foo/ .
jar cf test.jar *.class :将所有的class文件打包
jar cvf test.jar *.class :将所有的class文件打包,并在dos窗口中生成详细输出
jar tf test.jar :显示test.jar中的所有目录及文件(目录下的目录和文件也会显示)
jar cvfm classes.jar mymanifest -C foo/ . :打包的时候使用指定的manifest文件并将foo/目录中的所有文件归档到"classes.jar" 中
把归档后的test.jar文件解压,会发现多了个META-INF目录,META-INF目录下有个MANIFEST.MF文件,MANIFEST.MF文件的内容如下:
注意:此文件末尾有两个空行Manifest-Version: 1.0 Created-By: 1.6.0 (Sun Microsystems Inc.)
我们用-m指令可以指定manifest文件(也就是指定打包的时候META-INF目录下的MANIFEST.MF文件的内容)。我们现在新建一个MYMANIFEST.MF文件,内容如下:Main-Class:程序的入口类,也就是程序启动时最先调用的类Manifest-Version: 1.0 Class-Path: ./lib/msbase.jar ./lib/mssqlserver.jar ./lib/msutil.jar Created-By: 1.6.0 (Sun Microsystems Inc.) Main-Class: HelloWord
Class-Path:支持的库
注意:
1)末尾的两个空行同样不可少
2)Class-Path:和Main-Class:后面要有一个空格
以上两个注意点中的任意一个不符合的话,运行起来都会报错“Invalid or corrupt jarfile xxx.jar”
javadoc命令
javadoc命令是把代码中的javadoc转化为帮助文档的命令。
用法:javadoc [选项] [软件包名称] [源文件] [@file]
-overview <文件> 读取 HTML 文件的概述文档
-public 仅显示公共类和成员
-protected 显示受保护/公共类和成员(默认)
-package 显示软件包/受保护/公共类和成员
-private 显示所有类和成员
-help 显示命令行选项并退出
-doclet <类> 通过替代 doclet 生成输出
-docletpath <路径> 指定查找 doclet 类文件的位置
-sourcepath <路径列表> 指定查找源文件的位置
-classpath <路径列表> 指定查找用户类文件的位置
-exclude <软件包列表> 指定要排除的软件包的列表
-subpackages <子软件包列表> 指定要递归装入的子软件包
-breakiterator 使用 BreakIterator 计算第 1 句
-bootclasspath <路径列表> 覆盖引导类加载器所装入的类文件的位置
-source <版本> 提供与指定版本的源兼容性
-extdirs <目录列表> 覆盖安装的扩展目录的位置
-verbose 输出有关 Javadoc 正在执行的操作的消息
-locale <名称> 要使用的语言环境,例如 en_US 或 en_US_WIN
-encoding <名称> 源文件编码名称
-quiet 不显示状态消息
-J<标志> 直接将 <标志> 传递给运行时系统
通过标准 doclet 提供:
-d <directory> 输出文件的目标目录
-use 创建类和包用法页面
-version 包含 @version 段
-author 包含 @author 段
-docfilessubdirs 递归复制文档文件子目录
-splitindex 将索引分为每个字母对应一个文件
-windowtitle <text> 文档的浏览器窗口标题
-doctitle <html-code> 包含概述页面的标题
-header <html-code> 包含每个页面的页眉文本
-footer <html-code> 包含每个页面的页脚文本
-top <html-code> 包含每个页面的顶部文本
-bottom <html-code> 包含每个页面的底部文本
-link <url> 创建指向位于 <url> 的 javadoc 输出的链接
-linkoffline <url> <url2> 利用位于 <url2> 的包列表链接至位于 <url> 的文档
-excludedocfilessubdir <name1>:..排除具有给定名称的所有文档文件子目录。
-group <name> <p1>:<p2>..在概述页面中,将指定的包分组
-nocomment 不生成描述和标记,只生成声明。
-nodeprecated 不包含 @deprecated 信息
-noqualifier <name1>:<name2>:...输出中不包括指定限定符的列表。
-nosince 不包含 @since 信息
-notimestamp 不包含隐藏时间戳
-nodeprecatedlist 不生成已过时的列表
-notree 不生成类分层结构
-noindex 不生成索引
-nohelp 不生成帮助链接
-nonavbar 不生成导航栏
-serialwarn 生成有关 @serial 标记的警告
-tag <name>:<locations>:<header> 指定单个参数自定义标记
-taglet 要注册的 Taglet 的全限定名称
-tagletpath Taglet 的路径
-charset <charset> 用于跨平台查看生成的文档的字符集。
-helpfile <file> 包含帮助链接所链接到的文件
-linksource 以 HTML 格式生成源文件
-sourcetab <tab length> 指定源中每个制表符占据的空格数
-keywords 使包、类和成员信息附带 HTML 元标记
-stylesheetfile <path> 用于更改生成文档的样式的文件
-docencoding <name> 输出编码名称
javadoc HelloWorld.java
javadoc HelloWorld01.java HelloWorld02.java HelloWorld03.java
javadoc -d api @classlist.txt :@classlist.txt文件中指定了要生成文档的类的list,-d api指定文档生成到api目录下
除了指定.java文件,还可以指定包名。
比如想给com.test包底下的.java文件生成javadoc:D:>javadoc -sourcepath D:\workspace\src com.test
比如想给com.test包底下的.class文件生成javadoc:D:>javadoc -classpath D:\workspace\lib com.test
比如想给com.test包底下的.java文件和.class文件生成javadoc:D:>javadoc -sourcepath D:\workspace\src -classpath D:\workspace\lib com.test
其他命令
- -verbose : verbose是“冗长的,啰唆的,累赘的”的意思,也就是把编译的步骤,过程显示出来
编译:D:\>javac -verbose -d com/test HelloWorld.java
- -encoding : 指定源文件的编码,注意不是.class文件的编码
编译:D:\>javac -encoding UTF-8 -d com/test HelloWorld.java
指定读取java文件采用UTF-8编码
- -source
当你从sun安装了某个版本的JDK,而其实该JDK却包含多个版本的编译器。-source参数就是指定用哪个版本的编译器对java源码进行编译。如果你的java源
码不符合该版本编译器的规范的话,当然就不能编译通过。
编译:D:\>javac -source 1.6 HelloWorld.java
- -target
该 命令用于指定生成的class文件将保证和哪个版本的虚拟机进行兼容。我们可以通过-target 1.2来保证生成的class文件能在1.2虚拟机上进行运行,但是1.1的虚拟机就不能保证了。因为java虚拟机的向前兼容行,1.5的虚拟机当然也 可以运行通过-target 1.2让生成的class文件。
每个版本编译器的默认-target版本是不太一样的,
比如:
JDK1.2版本编译器支持-target 1.1,-target 1.2,-target 1.3,-target 1.4,-target 1.5,-target 1.6,它默认的就是1.1
JDK1.4版本编译器只支持-target 1.4 和-target 1.5
JDK1.5版本编译器就只支持-target 1.5
- -deprecation
如果java源码中使用了的不鼓励使用的类或类的Field或类的方法或类的方法覆盖,那么如果使用了该参数,将显示关于此的的详细信息,否则只有个简单的Note.
对于以下代码:
public class HelloWorld {
public static void main(String[] args) {
Thread t = new Thread();
t.destroy();
System.out.println("Hello World!");
}
}执行命令:D:\>javac -deprecation HelloWorld.java
结果会提示t.destroy();不推荐使用。