zoukankan      html  css  js  c++  java
  • 基于Java Socket的文件UpLoad代码(完美版)用递归解决java的目录树遍历

    http://blog.csdn.net/dongfengsun/archive/2007/12/12/1930577.aspx

    上次用J2SE写了一个文件夹传递工具,把所有文件都以字节流的形式写入到一个*.txt文件里。结果回到家后,光分目录筛选文件就浪费了我整整一个晚上。痛定思痛,决定还是从程序上来解决问题。

           那么所有的磁盘文件目录都是树的结构,而遍历树最好的方法非"深度优先遍历"莫属,其最有效的方法便是使用"递归"进行"深度优先遍历"。

          于是经过3个多小时的痛苦挣扎,最终写出了如下的程序,可以完整的读取文件夹里的所有内容,并不改变目录结构的放到Server所指定的路径下面。勘称"完美",嘿嘿。

    Server端程序:

    import java.io.DataInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.io.File;

    public class FileUpLoadProjServer extends Thread {

    public FileUpLoadProjServer(Socket s, String c) throws IOException {
    }

    public void run() {
    }

    public static void main(String[] args) {
      try {
       ServerSocket server = new ServerSocket(8110);
       Socket connection = null;
       while (true) {
        try {
         connection = server.accept();
         DataInputStream in = new DataInputStream(connection
           .getInputStream());
         String myFile = in.readUTF();
         String tempFile = "D"+myFile.substring(myFile.indexOf(":"));
         String strDiretory = "";
         int tempIndex = 0;
         while((tempIndex = tempFile.indexOf("\\")) != -1){
          strDiretory += tempFile.substring(0,tempIndex+1);
          tempFile = tempFile.substring(tempIndex+1);
         }
         System.out.println(strDiretory+" ,tempFile is :"+tempFile);
         File d = new File(strDiretory);
         d.mkdirs();
         File f = new File(strDiretory+tempFile);
         f.createNewFile();
         FileOutputStream fos = new FileOutputStream(f);
         int ch = 0;

         while ((ch = in.read()) != -1) {
          System.out.print((char) ch);
          fos.write(ch);
         }
         fos.close();
         connection.close();
        } catch (IOException ioe) {
         System.err.println(ioe);
        } finally {
         try {
          if (connection != null)
           connection.close();
         } catch (IOException e) {
         }
        }
       }
      } catch (IOException ee) {
       System.err.println(ee);
      }
    }
    }

    Client端程序:

    import java.io.DataOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.net.InetAddress;
    import java.net.Socket;

    public class FileUpLoadProjClient extends Thread {

    private Socket socket;
    private DataOutputStream out;
    final int port = 8110;
    String path = "C:\\src";
    String[] filePathArray = new String[1000];
    int fileNum;
    InetAddress m_addr;
    public FileUpLoadProjClient(InetAddress addr) {
      madetree(new File(path));
      m_addr = addr;
      start();
    }

    void madetree(File dothis) {
      File[] farray = dothis.listFiles();
      for (int i = 0; i < farray.length; i++) {
       if (farray[i].isFile()){
        filePathArray[fileNum++] = farray[i].getAbsolutePath();
       }else if(farray[i].isDirectory())
        madetree(farray[i]);
      }
    }

    public void run() {
      try {
       for(int k = 0;k < filePathArray.length&&filePathArray[k]!=null;k++){
         System.out.println("The file's absolutePath is :" + filePathArray[k]);
         try {
          socket = new Socket(m_addr, port);
          out = new DataOutputStream(socket.getOutputStream());
         } catch (IOException e) {
          try {
           socket.close();
          } catch (IOException e2) {
          }
         }
         FileInputStream fis = new FileInputStream(filePathArray[k]);
         int ch = 0;
         out.writeUTF(filePathArray[k]);
         while ((ch = fis.read()) != -1) {
          out.write(ch);
         }
         fis.close();
         socket.close();
       }
       out.close();
      } catch (IOException e) {
       e.printStackTrace();
      }
    }

    public static void main(String[] args) throws IOException,
       InterruptedException {
      InetAddress addr = InetAddress.getByName("127.0.0.1");
      new FileUpLoadProjClient(addr);
    }

    }

  • 相关阅读:
    webrtc源码分析-视频发送流程
    webrtc源码分析-Api接口
    webrtc源码分析-线程任务管理
    webrtc源码分析- jitter delay计算详解
    傅里叶变换
    从贝叶斯到卡尔曼滤波
    sql---case...when...
    python---collections模块记录(defaultdict, namedtuple, ChainMap)
    宏判断是否为Excel打开,若不是则关闭表格
    Golang混淆
  • 原文地址:https://www.cnblogs.com/pony/p/1172262.html
Copyright © 2011-2022 走看看