package com.main;
|
|
import java.io.File;
|
import java.io.FileOutputStream;
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.io.OutputStream;
|
import java.net.ServerSocket;
|
import java.net.Socket;
|
import java.net.UnknownHostException;
|
import java.util.zip.ZipEntry;
|
import java.util.zip.ZipInputStream;
|
import java.util.zip.ZipOutputStream;
|
|
public class HzipServer extends Thread {
|
Socket socket;
|
|
public HzipServer() {
|
// TODO Auto-generated constructor stub
|
}
|
|
public HzipServer(Socket socket) {
|
this.socket = socket;
|
}
|
|
@Override
|
public void run() {
|
try {
|
InputStream ins = socket.getInputStream();
|
ZipInputStream zis=new ZipInputStream(ins);
|
|
String rootDir=null;
|
//ÔÚ´Ë´ÎÁ¬½ÓÖУ¬ÊÇ·ñÊǵÚÒ»´Î¶Áµ½ZipEntry¡£¶Áµ½µÄµÚÒ»¸öEntry£¬¾ÍÊÇÕýÔÚ±»´«ÊäµÄÎļþ¼Ð¡£
|
boolean isFirst=true;
|
String savePath="D:"+File.separator+"gitspace"+File.separator;
|
//ÒÔÉÏΪ±£´æ½ÓÊÕµ½µÄÎļþ¼ÐµÄλÖá£
|
//Èç,·þÎñ¶Ë´«ÊäµÄÎļþ¼ÐÊÇD:\zipfolder,Ôò¸ÃÎļþ¼ÐÔÚ¿Í»§¶Ë½«±£´æÔÚD:\gitspace\¡£
|
//ΪÁËÁ¼ºÃµÄÒÆÖ²ÐÔ£¬ÕâÀïÓÃFile.separator£¬
|
//ÒòΪ·Ö¸ô·ûÔÚ²»Í¬µÄ²Ù×÷ϵͳÉÏ£¬¿ÉÄܲ»Ò»Ñù¡£
|
|
ZipEntry ze=null;
|
ZipOutputStream zos=null;
|
FileOutputStream fos=null;
|
OutputStream os=null;
|
byte[] b=new byte[1024];
|
int length=-1;
|
while( (ze=zis.getNextEntry())!=null )
|
{
|
String name=ze.getName();
|
File file=null;
|
if(ze.isDirectory())
|
{
|
if(isFirst)
|
{
|
isFirst=false;
|
|
//ÕâÀï¿ÉÄÜÒÆÖ²ÐÔ²»ºÃ,ÎÒ»¹Ã»Ñо¿Í¸,ÔÝÓô˷¨¡£
|
String[] temp=name.split("\\\\");
|
|
//Îļþ¼ÐµÄÃû×Ö.²Î¿´·þÎñ¶Ë´úÂë¿ÉÖª,Õâ¸öÃû×ÖÊÇ"/"½áβµÄ¡£
|
String selfName=temp[temp.length-1];
|
|
//È¥µô"/",ÕâÀï²ÅÊÇÕæÕýµÄÎļþ¼ÐµÄÃû×Ö¡£
|
//ºóÃæ½ÓÊÕµ½µÄÎļþ½«ÒªÒÔrootDirΪ²ÎÕÕÎï,È·¶¨±£´æÎ»Öá£
|
rootDir=selfName.substring(0, selfName.length()-1);
|
|
//µ½ÁËÕâÀï,Õâ¸öÎļþ¼ÐµÄ·¾¶Æäʵ¾ÍÊÇD:\gitspace\zipfolderÁË¡£
|
file=new File(savePath+selfName);
|
}
|
|
int index=name.indexOf(rootDir);
|
|
//È磬¸ÃÎļþÔÚ·þÎñ¶ËµÄλÖÃÊÇD:\zipfolder\a.txt,ÔòtempDir=zipfolder\a.txt
|
String tempDir=name.substring(index,name.length());
|
|
//Á½Õ߯´ºÏ£¬¸ÃÎļþÔÚ¿Í»§¶ËµÄ±£´æÂ·¾¶Ò²¾ÍÊÇD:\gitspace\zipfolder\a.txtÁË¡£
|
//Ïà¶ÔÓÚziplolder£¬¸ÃÎļþµÄλÖÃδ·¢Éú±ä»¯¡£
|
file=new File(savePath+tempDir);
|
|
if(!file.exists())
|
{
|
file.mkdirs();
|
}
|
}
|
else
|
{
|
int index=name.indexOf(rootDir);
|
String tempFileDir=name.substring(index,name.length());
|
file=new File(savePath+tempFileDir);
|
fos=new FileOutputStream(file);
|
while( (length=zis.read(b))> -1 )
|
{
|
fos.write(b, 0, length);
|
fos.flush();
|
}
|
//Õâ¾ä±ØÐëÓÐ,²»È»Îļþ¶àÁË,´ò¿ªµÄÎļþ¹ý¶à,½«»á·¢ÉúÒì³£
|
fos.close();
|
}
|
}
|
socket.close();
|
} catch (UnknownHostException e) {
|
e.printStackTrace();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
|
}
|
|
public static void main(String[] args) {
|
try {
|
ServerSocket serveracept = new ServerSocket(10100);
|
while(true) {
|
Socket s = serveracept.accept();
|
System.out.println("¼àÌýµ½¿Í»§¶ËÁ¬½Ó");
|
new HzipServer(s).start();
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
|