From 5d739fbf09719fc4e7f86b3ced0ee174c27a5de7 Mon Sep 17 00:00:00 2001
From: whyclj <1525436766@qq.com>
Date: 星期五, 26 七月 2019 10:36:58 +0800
Subject: [PATCH] 服务器端修改接收数据库备份文件是压缩包时bug

---
 DataBase_Bakeup_SocketServer/src/com/main/HzipServer.java |   37 +++++++++++++++++++++++++++----------
 1 files changed, 27 insertions(+), 10 deletions(-)

diff --git a/DataBase_Bakeup_SocketServer/src/com/main/HzipServer.java b/DataBase_Bakeup_SocketServer/src/com/main/HzipServer.java
index 2a7e1f4..c8df969 100644
--- a/DataBase_Bakeup_SocketServer/src/com/main/HzipServer.java
+++ b/DataBase_Bakeup_SocketServer/src/com/main/HzipServer.java
@@ -8,15 +8,17 @@
 import java.net.ServerSocket;
 import java.net.Socket;
 import java.net.UnknownHostException;
+import java.text.SimpleDateFormat;
 import java.util.Arrays;
 import java.util.Comparator;
+import java.util.Date;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 import java.util.zip.ZipOutputStream;
 
 
 public class HzipServer extends Thread {
-	public static final String MYSQLBACKUPDIR = "MYSQLBACKUPDIR";			//mysql数据库备份文件夹名称
+	public static final String MYSQLBACKUPDIR = "MySqlBackUpDir";			//mysql数据库备份文件夹名称
 	public static final int MAXSTORAGE = 3;
 	public static boolean ISNEEDDELETE = false;
 	public Socket socket;
@@ -39,7 +41,7 @@
 			InputStream ins = socket.getInputStream();
 			ZipInputStream zis=new ZipInputStream(ins);
 			
-			String rootDir=null;
+			String rootDir="REGULAR_BACKUP";
 			//在此次连接中,是否是第一次读到ZipEntry.读到的第一个Entry,就是正在被传输的文件夹。
 			boolean isFirst=true;
 			String savePath="D:"+File.separator+MYSQLBACKUPDIR+File.separator;
@@ -57,6 +59,7 @@
 			while( (ze=zis.getNextEntry())!=null  )
 			{
 				String name=ze.getName();
+				System.out.println(name);
 				File file=null;
 				if(ze.isDirectory())
 				{
@@ -94,7 +97,12 @@
 				}
 				else
 				{
-					int index=name.indexOf(rootDir);
+					int index;
+					if(isFirst) {
+						index = name.lastIndexOf("\\");
+					}else {						
+						index=name.indexOf(rootDir);
+					}
 					String tempFileDir=name.substring(index,name.length());
 					file=new File(savePath+tempFileDir);
 					fos=new FileOutputStream(file);
@@ -108,6 +116,8 @@
 				}
 			}
 			socket.close();
+			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+			System.out.println("Backup MySql OK at " + sdf.format(new Date()));
 			ISNEEDDELETE = true;
 		} catch (UnknownHostException e) {
 			e.printStackTrace();
@@ -140,7 +150,7 @@
 					String savePath="D:"+File.separator+MYSQLBACKUPDIR+File.separator;
 					File fileroot = new File(savePath);
 					File[] files = fileroot.listFiles();
-					if(ISNEEDDELETE && files.length >3) {
+					if(ISNEEDDELETE && fileroot.exists() && files.length >3) {
 						deleteFileRoot(savePath, MAXSTORAGE);		//删除超过3次的备份数据
 						ISNEEDDELETE = false;
 					}			
@@ -183,9 +193,9 @@
 			if(file.exists()) {
 				File[] files = file.listFiles();
 				Arrays.sort(files, new CompratorByLastModified());
-				if(files.length>=filecount && filecount>0) {
+				if(files.length>filecount && filecount>0) {
 					//System.out.println("文件夹个数:"+files.length + "\t 最大笔数:"+filecount);
-					for(int i=(filecount-1);i<files.length;i++) {
+					for(int i=filecount;i<files.length;i++) {
 						deleteDir(files[i]);
 					}
 				}
@@ -216,11 +226,18 @@
 			DeleteRegularThread deletethread = server.createDeleteRegularThreadStructure();
 			deletethread.start();		//启动删除多余备份数据库线程
 			
+			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+			
+			System.out.println("MySql BackUpThread Start at "+sdf.format(new Date()));
 			while(true) {
-				Socket s = serveracept.accept();
-				//System.out.println("监听到客户端连接");
-				server = new HzipServer(s);
-				server.start();
+				try {
+					Socket s = serveracept.accept();
+					//System.out.println("监听到客户端连接");
+					server = new HzipServer(s);
+					server.start();
+				} catch (Exception e) {
+					e.printStackTrace();
+				}
 			}
 			
 			

--
Gitblit v1.9.1