目录
日常编写Java程序都是使用IDE来编码,IDE的功能极大的方便了程序的开发。相比之下使用记事本+javac的方式去编写程序,会显得及其不便。但是,由于各类考试中会遇到手写代码的情况,可能会涉及到比较这块内容;工作中也有可能遇到服务器环境上调试代码得情况,所以专门在这里记录一下。有时间的话,还需要学习一下ANT工具。
一、新建项目
新建src用于编写源代码
新建bin用于输出编译的文件,执行时也是在bin目录下。
二、编写一个HelloWorld
1、编写代码
这里先用记事本编写一个java源文件保存至src目录
2、编译
cmd命令进入HelloWorld目录,
输入javac src/HelloWorld.java -d bin/,回车,如无报错则说明编译成功。
此时jdk会在bin目录下生成一个HelloWorld.class的字节码文件
3、运行HelloWorld
cmd进入bin目录,输入java HelloWorld,回车,HelloWorld即被执行。
三、编写一个可执行命令行程序
目标:通过java实现与Windows的dir命令类似的可执行程序。
1、在src中新建目录
md com/myself
相当于在IDE中新建package
2、使用文本编辑器编写代码
这里代码不是重点,重点是了解javac命令如何使用,所以尽可能使代码量少一些。
代码如下:
题外话:用记事本写代码还是挺考验对Java知识掌握程度的,不用IDE编程还是挺难的。
DirCommand接口
package com.myself;
import java.io.File;
public interface DirCommand{
public void GetFileList();
}
DirCommandImpl实现DirCommand接口
package com.myself;
import java.io.File;
import java.text.SimpleDateFormat;
public class DirCommandImpl extends File implements DirCommand{
public DirCommandImpl(String filepath){
super(filepath);
}
public void GetFileList(){
File[] dest = super.listFiles();
int filecount = 0;
int dircount = 0;
long filesize = 0;
for(File file : dest){
if (file.isFile()){
filecount = filecount + 1;
filesize = filesize + file.length();
} else if(file.isDirectory()){
dircount = dircount + 1;
}
Long lastModifiedTime = file.lastModified();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(lastModifiedTime) + " " + file.length()+" " + file.getName());
}
System.out.println("\r\n"+filecount + "个文件 " +filesize+"字节");
System.out.println(dircount + "个目录 " +super.getFreeSpace()+"可用字节");
}
}
Main可执行类
package com.myself;
public class Main {
public static void main(String args[]){
DirCommand dir = null;
//目标路径作为参数从调用程序接收,不输入则默认为程序执行路径
if(args.length == 0){
String syspath = System.getProperty("user.dir");
dir = new DirCommandImpl(syspath);
}else if(args.length > 0){
dir = new DirCommandImpl(args[0]);
}else{
return;
}
dir.GetFileList();
}
}
3、编译
在Helloworld路径下,cmd输入javac src\com\myself\*.java -d bin\ -encoding utf-8
这里使用了通配符来表示java源文件,也可以指定文件名
javac DirCommand.java DirCommandImpl.java Main.java -d bin\ -encoding utf-8
-d 是指定字节码文件的输出路径
-encoding是指定文件编码。由于以上三个java文件是在Notepad++中编写,默认UTF-8编码,而cmd默认是GBK编码,所以需要这样写来避免字符导致的编译错误、
无报错,则说明 编译成功。
编译结果为:
4、运行
cmd进入bin目录下,输入java com.myself.Main
回车,得到如下结果
5、打包
bin目录下。cmd输入jar -cvf Dir.jar com\
将com包里面的内容都打包到bin目录下的Dir.jar中。
此时的jar包目录是
在META-INF中的MANIFEST.MF中添加一句Main-Class: com.myself.Main
Manifest-Version: 1.0
Created-By: 1.7.0_79 (Oracle Corporation)
Main-Class: com.myself.Main
jar包就是可执行jar包了。
在bin目录下输入java -jar Dir.jar即可执行。
四、编写一个引用第三方Jar包的可执行命令行程序
目标:将以上生成的Dir.jar作为第三方jar包,在主方法中引用com.myself.Main,mian()来实现与上述功能相同的jar包。引用其他第三方jar包可能涉及到比较复杂的配置过程,所以这里是为了引用第三方jar包而引用,仅供练习。
1、新建一个项目
项目结构
2、编写代码
TestDirJar.java
package com;
import com.myself.Main;
public class TestDirJar{
public static void main(String args[]){
System.out.println("TestDirJar 调用了 Main 主方法。");
Main.main(args);
}
}
3、编译
在Helloworld2目录下输入javac -cp .;lib\Dir.jar src\com\TestDirJar.java -d bin\ -encoding utf-8
无报错则说明编译成功
-cp 指定jar包位置。‘.;'必须写上,代表源文件根目录。
4、运行
在bin目录下:输入java -cp .;..\lib\Dir.jar com.TestDirJar
5、打包
新建一个目录hello作为jar包路径
jar -cvf E:\Hello\TestDir.jar com\
将lib目录复制到hello根目录,形成如下结构;
修改MANIFEST.MF如下:
Manifest-Version: 1.0
Created-By: 1.7.0_79 (Oracle Corporation)
Main-Class: com.TestDirJar
Class-Path: lib\Dir.jar
在hello目录下输入java -jar TestDir
运行结果同上;
感想:使用javac命令来编译Java程序,使用文本编辑器写Java代码,还是很难的。日常开发工作环境下,一定是要用IDE来开发的。