十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
import java.io.File;
成都创新互联专注于札达网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供札达营销型网站建设,札达网站制作、札达网页设计、札达网站官网定制、重庆小程序开发服务,打造札达网络公司原创品牌,更为您提供札达网站排名全网营销落地服务。
import 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 {
ArrayListString fileListInDB = new ArrayListString();
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);
StackFile tmpStack = new StackFile();
tmpStack.add(home);
while (!tmpStack.isEmpty()) {
File tmp = tmpStack.pop();
File[] childs = tmp.listFiles();
for (int i = 0; i childs.length; i++) {
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();
}
}
}
有些第三方厂商如(ANT),也提供了调用windows下可执行程序的方法,但我们往往需要调用一些批处理命令。而java 却不提供。
这里,我采用一种变相的调用方法,使得Java 能调用批处理命令。如果您有更好的方法,希望您能告诉我。
前期准备[/B]
Quick Batch File (De)Compiler
将任何BAT、CMD批处理脚本编译为EXE文件!开始1. 运行exe 文件
Java JDK里已经提供了调用的方法,不在累赘,代码如下。
try {String command = "notepad";
Process child = Runtime.getRuntime().exec(command);
} catch (IOException e) {}
2. 运行 bat(批处理) 文件
在Google上搜索一下,找到Quick Batch File (De)Compiler,可以将任何BAT、CMD批处理脚本编译为EXE文件。使用了一下,果然可以。
Quick Batch File (De)Compiler使用非常简单:
Quickbfc 文件名.bat 文件名.exe(将批处理命令编译为可执行文件)
quickbfd 文件名.exe 文件名.bat(将可执行文件反编译为批处理命令)
然后,我们再按第一种方法通过Java 调用,即可。
很久没有写JAVA的批处理了都搞忘记了折腾了个把小时总算搞出来了如下:SetLocal EnableDelayedExpansionset classpath=.for %%c in (lib\*.jar) do set classpath=!classpath!;%%cset classpath=%classpath%;./classes;java com.ham.server.Server备注:以上代码一行都不能少
这是我一个真实的项目。发布批处理程序,结构目录如下:
data文件存放数据,etc存放配置文件,lib,存放项目jar包,startup.bat/startup.sh启动脚本。
1、-----windows上.bat文件调用java程序。bat文件内容如下------
echo off
rem setup classpath
echo set _CP=%%_CP%%;%%1 cp.bat
set _CP=.;\classes;"%JAVA_HOME%\lib\dt.jar";"%JAVA_HOME%\lib\tools.jar"
for %%i in (lib\*.jar) do call cp.bat %%i
set CLASSPATH=%_CP%
del cp.bat
echo %CLASSPATH%
rem set JAVA_HOME=
set JAVA_OPTION=-Dfile.encoding=GBK -Xms256m -Xmx256m -XX:MaxPermSize=64m
set RUN_CLASS=batch.Main
"%JAVA_HOME%\bin\java" %JAVA_OPTION% -classpath %CLASSPATH% %RUN_CLASS%
2、-------unix/linux上shell调用java程序,shello文件内容如下---------
if [ -z ${JAVA_HOME} ]
then
echo "JAVA_HOME not set yet,can't run java program!"
exit -1
fi
CLASSPATH=.:${JAVA_HOME}/lib/tools.jar:${JAVA_HOME}/lib/dt.jar
JLIBDIR=./lib
export JLIBDIR
for LL in `ls ${JLIBDIR}/*.jar`
do
CLASSPATH=${CLASSPATH}:${LL}
done
echo ${CLASSPATH}
export CLASSPATH
JAVA_OPTION="-Dfile.encoding=GBK -Xms256m -Xmx256m -XX:MaxPermSize=64m"
RUN_CLASS=batch.Main
${JAVA_HOME}/bin/java ${JAVA_OPTION} -classpath ${CLASSPATH} ${RUN_CLASS}
批量数据进入数据库使用addBatch()和executeBatch()方法
PreparedStatement.addBatch(); ...... PreparedStatement.executeBatch();需要注意的是一次最多不要超过50条:1.因为插入的时候数据库已经锁定,然而若是一次性插入太多会造成其他业务的等待。2.会造成内存的溢出
举例:
PreparedStatement pst = (PreparedStatement) con.prepareStatement("insert into ***** values (?,'***')"); for (int i = 0; i 10000; i++) { pst.setInt(1, i); // 把一个SQL命令加入命令列表 pst.addBatch(); } // 执行批量更新 pst.executeBatch(); // 语句执行完毕,提交本事务 con.commit();
在文档中写上 java -jar D:\workspace\test\test_fat.jar 然后文档后缀改成.bat。然后把bat文件和你的test_fat放在一个文件夹中,就行了
前提是:你的jar包打的正确,用Eclipes打包时注意指定Main Class
然后就没问题了。
你也可以手动修改
打开jar包,里面有个mate-inf文件夹,把里面的manifest.mf文件拷出来,打开,如下:
Manifest-Version: 1.0
Created-By: 1.6.0_06 (Sun Microsystems Inc.)
Main-Class: thinkerbell.src.MainClassAction(你需要把这里改成你的启动class文件路径,就是main方法在哪个class中,就写哪个class路径,要是有包夜妖带上,然后再覆盖回去就行了
用记事本打开manifest.mf,然后修改就可以了;