java如何实现增量更新_java增量更新打包工具

Java程序增量更新是一个吃力不讨好的工作,浪费了时间不说,还很容易出现漏掉文件、错放文件位置等问题。如果有一个比较好的管理机制,把这些事情交给程序自动处理就省事的多了。

工具尚不成熟,不过用起来比手动去选择增量文件要方便的多。下面就直接上代码了。

工具包括三个工具类,一个配置文件,一个程序启动类,具体如下:

文件工具类

Java代码

packagecn.lihua.util;

importjava.io.BufferedInputStream;

importjava.io.BufferedOutputStream;

importjava.io.File;

importjava.io.FileInputStream;

importjava.io.FileNotFoundException;

importjava.io.FileOutputStream;

importjava.io.IOException;

importjava.nio.channels.FileChannel;

publicclassFileUtil {

publicstaticlongcopyFile1(File srcFile, File destDir, String newFileName) {

longcopySizes =0;

if(!srcFile.exists()) {

System.out.println("源文件不存在");

copySizes = -1;

}elseif(!destDir.exists()) {

System.out.println("目标目录不存在");

copySizes = -1;

}elseif(newFileName ==null) {

System.out.println("文件名为null");

copySizes = -1;

}else{

try{

BufferedInputStream bin =newBufferedInputStream(

newFileInputStream(srcFile));

BufferedOutputStream bout =newBufferedOutputStream(

newFileOutputStream(newFile(destDir, newFileName)));

intb =0, i =0;

while((b = bin.read()) != -1) {

bout.write(b);

i++;

}

bout.flush();

bin.close();

bout.close();

copySizes = i;

}catch(FileNotFoundException e) {

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}

}

returncopySizes;

}

publicstaticlongcopyFile2(File srcFile, File destDir) {

longcopySizes =0;

if(!srcFile.exists()) {

System.out.println("源文件不存在");

return-1;

}

try{

FileChannel fcin =newFileInputStream(srcFile).getChannel();

FileChannel fcout =newFileOutputStream(destDir).getChannel();

longsize = fcin.size();

fcin.transferTo(0, fcin.size(), fcout);

fcin.close();

fcout.close();

copySizes = size;

}catch(FileNotFoundException e) {

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}

returncopySizes;

}

publicstaticvoidcopyDict(File source, File target,longlast,String target_pack) {

File[] file = source.listFiles();

for(inti =0; i 

if(file[i].getName().contains("svn")){

continue;

}

if(file[i].isFile()) {

if(file[i].lastModified()>=last){

if((file[i].getName().endsWith(".hbm.xml")||file[i].getName().endsWith(".class"))&&

notEmpty(target_pack)&&!source.getAbsolutePath().contains(target_pack)){

continue;

}

System.out.println(source.getAbsolutePath());

File sourceDemo =newFile(source.getAbsolutePath() +"/"

+ file[i].getName());

File destDemo =newFile(target.getAbsolutePath() +"/"

+ file[i].getName());

copyFile2(sourceDemo, destDemo);

}

}

if(file[i].isDirectory()) {

File sourceDemo =newFile(source.getAbsolutePath() +"/"

+ file[i].getName());

File destDemo =newFile(target.getAbsolutePath() +"/"

+ file[i].getName());

destDemo.mkdir();

copyDict(sourceDemo, destDemo,last,target_pack);

}

}

}

publicstaticbooleannotEmpty(String str) {

returnstr!=null&&!str.isEmpty();

}

publicstaticvoiddeleteEmptyDir(File dir) {

if(dir.isDirectory()) {

File[] fs = dir.listFiles();

if(fs !=null&& fs.length >0) {

for(inti =0; i 

File tmpFile = fs[i];

if(tmpFile.isDirectory()) {

deleteEmptyDir(tmpFile);

}

if(tmpFile.isDirectory() && tmpFile.listFiles().length <=0) {

tmpFile.delete();

}

}

}

if(dir.isDirectory() && dir.listFiles().length ==0) {

dir.delete();

}

}

}

publicstaticvoidmain(String[] args) {

String [] s ="127.0.0.1 - - [14/Sep/2012:11:27:10 +0800] POST /newkyhb/sys/loginlognews.action HTTP/1.1 200 356 0.032".split(" ");

for(String string : s) {

System.out.println(string);

}

}

}

package cn.lihua.util;

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.nio.channels.FileChannel;

public class FileUtil {

public static long copyFile1(File srcFile, File destDir, String newFileName) {

long copySizes = 0;

if (!srcFile.exists()) {

System.out.println("源文件不存在");

copySizes = -1;

} else if (!destDir.exists()) {

System.out.println("目标目录不存在");

copySizes = -1;

} else if (newFileName == null) {

System.out.println("文件名为null");

copySizes = -1;

} else {

try {

BufferedInputStream bin = new BufferedInputStream(

new FileInputStream(srcFile));

BufferedOutputStream bout = new BufferedOutputStream(

new FileOutputStream(new File(destDir, newFileName)));

int b = 0, i = 0;

while ((b = bin.read()) != -1) {

bout.write(b);

i++;

}

bout.flush();

bin.close();

bout.close();

copySizes = i;

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

return copySizes;

}

public static long copyFile2(File srcFile, File destDir) {

long copySizes = 0;

if (!srcFile.exists()) {

System.out.println("源文件不存在");

return -1;

}

try {

FileChannel fcin = new FileInputStream(srcFile).getChannel();

FileChannel fcout = new FileOutputStream(destDir).getChannel();

long size = fcin.size();

fcin.transferTo(0, fcin.size(), fcout);

fcin.close();

fcout.close();

copySizes = size;

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return copySizes;

}

public static void copyDict(File source, File target,long last,String target_pack) {

File[] file = source.listFiles();

for (int i = 0; i < file.length; i++) {

if(file[i].getName().contains("svn")){

continue;

}

if (file[i].isFile()) {

if(file[i].lastModified()>=last){

if((file[i].getName().endsWith(".hbm.xml")||file[i].getName().endsWith(".class"))&&

notEmpty(target_pack)&&!source.getAbsolutePath().contains(target_pack)){

continue;

}

System.out.println(source.getAbsolutePath());

File sourceDemo = new File(source.getAbsolutePath() + "/"

+ file[i].getName());

File destDemo = new File(target.getAbsolutePath() + "/"

+ file[i].getName());

copyFile2(sourceDemo, destDemo);

}

}

if (file[i].isDirectory()) {

File sourceDemo = new File(source.getAbsolutePath() + "/"

+ file[i].getName());

File destDemo = new File(target.getAbsolutePath() + "/"

+ file[i].getName());

destDemo.mkdir();

copyDict(sourceDemo, destDemo,last,target_pack);

}

}

}

public static boolean notEmpty(String str) {

return str!=null&&!str.isEmpty();

}

public static void deleteEmptyDir(File dir) {

if (dir.isDirectory()) {

File[] fs = dir.listFiles();

if (fs != null && fs.length > 0) {

for (int i = 0; i < fs.length; i++) {

File tmpFile = fs[i];

if (tmpFile.isDirectory()) {

deleteEmptyDir(tmpFile);

}

if (tmpFile.isDirectory() && tmpFile.listFiles().length <= 0) {

tmpFile.delete();

}

}

}

if (dir.isDirectory() && dir.listFiles().length == 0) {

dir.delete();

}

}

}

public static void main(String[] args) {

String [] s = "127.0.0.1 - - [14/Sep/2012:11:27:10 +0800] POST /newkyhb/sys/loginlognews.action HTTP/1.1 200 356 0.032".split(" ");

for (String string : s) {

System.out.println(string);

}

}

}

Properties文件工具类

Java代码

packagecn.lihua.util;

importjava.io.InputStream;

importjava.util.Properties;

publicclassPropertiesUtil {

//private static final Logger logger = LoggerFactory.getLogger(PropertiesUtil.class);

privatestaticfinalProperties prop = loadPropertiesFile("setting.properties");

privatestaticProperties loadPropertiesFile(String filePath) {

InputStream in;

try{

in = PropertiesUtil.class.getClassLoader().getResourceAsStream(filePath);

Properties p =newProperties();

p.load(in);

returnp;

}catch(Exception e) {

e.printStackTrace();

}

returnnull;

}

publicstaticString getString(String key) {

if(prop !=null)

returnprop.getProperty(key);

returnnull;

}

}

package cn.lihua.util;

import java.io.InputStream;

import java.util.Properties;

public class PropertiesUtil {

//private static final Logger logger = LoggerFactory.getLogger(PropertiesUtil.class);

private static final Properties prop = loadPropertiesFile("setting.properties");

private static Properties loadPropertiesFile(String filePath) {

InputStream in;

try {

in = PropertiesUtil.class.getClassLoader().getResourceAsStream(filePath);

Properties p = new Properties();

p.load(in);

return p;

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

public static String getString(String key) {

if (prop != null)

return prop.getProperty(key);

return null;

}

}

工程目录工具类

Java代码

packagecn.lihua.util;

importjava.io.File;

importjavax.xml.parsers.DocumentBuilder;

importjavax.xml.parsers.DocumentBuilderFactory;

importorg.w3c.dom.Document;

importorg.w3c.dom.Element;

importorg.w3c.dom.NodeList;

publicclassWebRootUtil {

privatestaticDocument doc =null;

publicstaticvoidinit(String xmlFile)throwsException {

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

DocumentBuilder db = dbf.newDocumentBuilder();

doc = db.parse(newFile(xmlFile));

}

publicstaticString getRootName(String xmlFile)throwsException {

String webRoot ="WebRoot";

init(xmlFile);

NodeList nodeList = doc.getElementsByTagName_r("attribute");

for(inti =0, len = nodeList.getLength(); i 

Element attribute = (Element) nodeList.item(i);

if("webrootdir".equals(attribute.getAttribute("name"))){

webRoot = attribute.getAttribute("value");

break;

}

}

returnwebRoot;

}

publicstaticvoidmain(String[] args)throwsException {

System.out.println(getRootName("D:\\workspace\\newkyhb\\.mymetadata"));

}

}

package cn.lihua.util;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.NodeList;

public class WebRootUtil {

private static Document doc = null;

public static void init(String xmlFile) throws Exception {

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

DocumentBuilder db = dbf.newDocumentBuilder();

doc = db.parse(new File(xmlFile));

}

public static String getRootName(String xmlFile) throws Exception {

String webRoot = "WebRoot";

init(xmlFile);

NodeList nodeList = doc.getElementsByTagName_r("attribute");

for (int i = 0, len = nodeList.getLength(); i < len; i++) {

Element attribute = (Element) nodeList.item(i);

if ("webrootdir".equals(attribute.getAttribute("name"))){

webRoot = attribute.getAttribute("value");

break;

}

}

return webRoot;

}

public static void main(String[] args)throws Exception {

System.out.println(getRootName("D:\\workspace\\newkyhb\\.mymetadata"));

}

}

Properties配置文件

Properties代码

#\u4E0A\u4F20\u6587\u4EF6\u5B58\u653E\u8DEF\u5F84

source_path=D\:\\workspace\\newkyhb

target_path=D\:\\update_version

update_date=2012-09-13

target_pack=\\jsp

#\u4E0A\u4F20\u6587\u4EF6\u5B58\u653E\u8DEF\u5F84

source_path=D\:\\workspace\\newkyhb

target_path=D\:\\update_version

update_date=2012-09-13

target_pack=\\jsp

启动类

Java代码

packagecn.lihua;

importjava.io.File;

importjava.text.SimpleDateFormat;

importjava.util.Date;

importcn.lihua.util.FileUtil;

importcn.lihua.util.PropertiesUtil;

importcn.lihua.util.WebRootUtil;

publicclassStartup {

privatestaticSimpleDateFormat sdf =newSimpleDateFormat("yyyy-MM-dd");

privatestaticlongpacked_date;//修改文件起始时间

privatestaticString source_path;//原工程目录

privatestaticString target_path;//打包目录

privatestaticString target_pack;//class打包包名

privatestaticString project_new_name;//新打包工程名称

privatestaticString meta_data_file =".mymetadata";//根目录配置文件

privatestaticString root_name;//拷贝根目录

privatestaticvoidinit()throwsException{

String update_date =PropertiesUtil.getString("update_date");

packed_date = sdf.parse(update_date).getTime();

source_path =PropertiesUtil.getString("source_path");

String project_name = source_path.substring(source_path.lastIndexOf("\\")+1);//原工程名

project_new_name = project_name +"("+ sdf.format(newDate()) +")";

root_name = WebRootUtil.getRootName(source_path + File.separator + meta_data_file);

target_pack =PropertiesUtil.getString("target_pack");

target_path =PropertiesUtil.getString("target_path");

File target =newFile(target_path + File.separator + project_new_name);

if(!target.exists()){

target.mkdirs();

}

}

publicstaticvoidcopy(){

FileUtil.copyDict(

newFile(source_path + File.separator + root_name),

newFile(target_path + File.separator + project_new_name),

packed_date,target_pack);

FileUtil.deleteEmptyDir(

newFile(target_path + File.separator + project_new_name));

}

publicstaticvoidmain(String[] args)throwsException {

System.out.println("======================================");

System.out.println("正在进行初始化操作……");

init();

System.out.println("======================================");

System.out.println("拷贝的源文件目录如下:");

copy();

System.out.println("======================================");

System.out.println("打包完成! ");

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值