1、新建一个文件夹,将要执行java程序(可使用eclipse导出的可执行的jar包)拷贝到该文件夹中;
2、将jdk中jre文件夹拷贝到要执行的java程序所在的文件夹;
3、在java程序所在的文件夹中新建一个bat文件。
bat文件样例:
样例一:
@echo off
set PATH=.%CD%\SocketAdapter_lib\jre\bin
set CLASSPATH=.
start java.exe -jar SocketAdapter.jar
@pause
样例二:
@echo off
start SocketAdapter_lib\jre\bin\java -jar SocketAdapter.jar
@pause
注:
可以在没有安装JRE的环境中,运行Java应用程序
java.exe 具体使用参见cmd中输入java -help
javaw.exe 相对于 java.exe 执行java程序过程中MS-DOS不可见
对于安装了JRE的环境中,第2步可以省略,bat文件如下
样例三:
@echo off
java -jar SocketAdapter.jar
@pause
出现“'javac' 不是内部或外部命令,也不是可运行的程序或批处理文件。”表示环境变量配置有误。
环境变量:
*环境变量:是供系统内部使用的变量,是包含系统的当前系统用户的环境信息的字符串和软件的一个确定存放的路径 ;
*path:windows系统执行命令时要搜索的路径 ;
*classpath:java在编译和运行时要找的class文件所在的路径 ;
设置JAVA_HOME:
一是为了方便引用,比如,JDK安装在D:\MyProgram\java\jdk目录里,则设置JAVA_HOME为该目录路径, 那么以后要使用这个路径的时候, 只需输入%JAVA_HOME%即可, 避免每次都输入很长的路径串
二则是归一原则, 当JDK路径改变的时候, 仅需更改JAVA_HOME的变量值即可, 否则,就要更改任何用绝对路径引用JDK目录的文档, 要是万一没有改全, 某个程序找不到JDK, 后果是系统崩溃!
三则是第三方软件会引用约定好的JAVA_HOME变量, 不然, 你不能正常使用该软件.
import java.io.Fileimport java.io.FileWriter
import java.io.IOException
import java.sql.ResultSet
import java.sql.SQLException
import java.util.ArrayList
import java.util.Stack
public class CheckFilebatch {
private static final String LOG_FILE = "F:/CheckFilebatch.log"//报错的信息写在这个文件里。
private static final String FILE_HOME = "F:/niceStore /"//要操作的物理目录
public static void main(String[] args) {
try {
ArrayList<String>fileListInDB = new ArrayList<String>()
FileWriter fw = new FileWriter(LOG_FILE)
// TODO
// 取得DB连接,执行sql“SELECT DISTINCT FILEPATH FROM ARR-FILE”,得到一个ResultSet
// 从DB中取出文件信息,放入fileListInDB 中,
ResultSet rs = null
while (rs.next()) {
String path = rs.getString("File_Column")
File f = new File(path)
if (!f.exists()) {
// 不合法的报出错误信息。
System.out.println("file not exists: " + path)
fw.write("file not exists: " + path + "\n")
} else {
// 合法的,转化为路径名的规范路径名字符串,加入到fileListInDB中
fileListInDB.add(f.getCanonicalPath())
}
}
rs.close()
//
fw.write("\n\n\n\n")
//下面开始遍历物理目录
File home = new File(FILE_HOME)
Stack<File>tmpStack = new Stack<File>()
tmpStack.add(home)
while (!tmpStack.isEmpty()) {
File tmp = tmpStack.pop()
File[] childs = tmp.listFiles()
for (int i = 0i <childs.lengthi++) {
File child = childs[i]
if (child.isDirectory()) {
tmpStack.push(child)
} else {
if (fileListInDB.contains(child.getCanonicalPath())) {
fileListInDB.remove(child.getCanonicalPath())
} else {
// 删除文件。
child.delete()
// 这里的操作如果把它移动到另一个目录里,作为备份,更好些。
fw.write("delete file: " + child.getCanonicalPath())
}
}
}
}
// 这个程序只考虑文件,不考虑目录
fw.close()
} catch (SQLException e) {
e.printStackTrace()
} catch (IOException e1) {
e1.printStackTrace()
}
}
}