New file |
| | |
| | | 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();
|
| | | }
|
| | | }
|
| | | }
|
| | |
|