whyclj
2019-02-18 19d0fd39d8c8bce7789dcbd803ded6205f79cef9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
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();
        }
    }
}