whyclj
2019-02-18 9ab87ec428de8a4b9c3ee8dcaa79110b32c59ca2
客户端
1个文件已添加
82 ■■■■■ 已修改文件
DataBase_Bakeup_SocketClient/src/com/main/HzipSocket.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataBase_Bakeup_SocketClient/src/com/main/HzipSocket.java
New file
@@ -0,0 +1,82 @@
package com.main;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class HzipSocket extends Thread {
    //无论文件,还是文件夹都是一个ZipEntry。
    /**
     * 这里默认所有文件都可以读写,但在实际应用中,
     * 为了程序的健壮性,必须判断文件是否可读、可写,
     * 是否是隐藏文件等,在安卓里这种情形很常见。
     * 例如,不可读的文件,自然也就没法传输了。
     * @param file  要传送的文件夹。
     * @param zos   包装后的socket的outputstream
     * @param b     缓存所用。一个容器。
     */
    private void zipEntry(File file,ZipOutputStream zos,byte[] b)
    {
        if(file.isDirectory())//如果文件是目录,就没什么需要传输的了,
            //只要在zos里放进一个ZipEntry,然后递归它里面的文件
        {
            //ZipEntry有个方法isDirectory(),可判断该ZipEntry表示的
            //而是不是目录(文件夹),依据就是该ZipEntry的name是不是以“/”结尾的。
            ZipEntry ze=new ZipEntry(file.getAbsolutePath()+"/");
            try {
                zos.putNextEntry(ze);
            } catch (IOException e) {
                e.printStackTrace();
            }
            File[] files=file.listFiles();
            for(File f:files)
            {
                zipEntry(f, zos,b);
            }
        }
        else
        {
            ZipEntry ze=new ZipEntry(file.getAbsolutePath());
            try {
                zos.putNextEntry(ze);
                FileInputStream ins = new FileInputStream(file);
                int length=-1;
                while(  (length=ins.read(b))>-1 )
                {
                    zos.write(b, 0, length);
                    zos.flush();
                }
                zos.flush();
                zos.closeEntry();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args) {
        try {
            Socket s = new Socket("127.0.0.1",10100);
            HzipSocket h = new HzipSocket();
            //要发送出去的文件夹.请注意在不同操作系统上,表示方法可能不一样。
            File file =new File("D:/temp");
            OutputStream os=s.getOutputStream();
            ZipOutputStream gout=new ZipOutputStream(os);
            byte[] b=new byte[1024];
            h.zipEntry(file, gout,b);
            s.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}