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);
}

}

转载于:https://www.cnblogs.com/pony/archive/2008/04/26/1172262.html

基于Java Socket的文件UpLoad代码(完美版)-用递归解决java的目录树遍历相关推荐

  1. 基于TCP,Socket编程,模仿腾讯QQ界面,使用Java开发的一款网络聊天工具。QQ_Chat

    代码下载地址 原博客地址 QQ_Chat 基于TCP,Socket编程,模仿腾讯QQ界面,使用Java开发的一款网络聊天工具. (内含报告) 工具: Eclipse.Navicat for MySQL ...

  2. JAVA编程习题及答案_完美版

    JAVA编程习题及答案_完美版 原创 lingwu7 最后发布于2017-08-15 20:01:12 阅读数 10796 收藏 发布于2017-08-15 20:01:12 版权声明:本文为博主原创 ...

  3. Java源码 JavaWeb开发框架 代码 SSH SSM OA ERP CRM Java项目[Java通用框架源码及开发视频教程]

    Java源码 JavaWeb开发框架 代码 SSH SSM OA ERP CRM Java项目 功能简介: A.代码生成器(开发利器) 生成Java各层次的类和JSP等文件,提高开发效率 B.阿里巴巴 ...

  4. java 中传输文件的代码_java文件上传Demo(必看篇)

    说到文件上传我们要做到: 1.引入两个包:commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar 2.将form改为上传文件模式:enctype=" ...

  5. Java Socket实现文件传输

    阿里云双11服务器优惠(年度最佳优惠): A:1核2GB 1M 服务器年69元 B:1核2GB 1M 服务器三年180元 C:2核4GB 1~10M 服务器三年567元(强烈推荐) D:4核8GB 1 ...

  6. 配置Eclipse支持java和xml文件的代码补全功能

    本文介绍如何配置Eclipse,使得在编写代码时无论是*.java还是*.xml文件都能够通过使用ALT+/快捷键实现代码不全的功能. 本文实验环境为:Windows 7 + Eclipse 一.配置 ...

  7. java socket 打印机_思普瑞特,小票打印机和标签打印机java网络驱动设计与实现...

    网络打印走的socket连接,主流的java, php, c, c#等语言都支持socket,所以实现打印机的网络打印几乎是和语言无关的 打印机默认端口是9100 使用socket连接上打印机后,将打 ...

  8. java单元测试读文件数据_如何将文本文件资源读入Java单元测试?

    本问题已经有最佳答案,请猛点这里访问. 我有一个单元测试需要使用位于src/test/resources/abc.xml中的XML文件.把文件的内容放到String中最简单的方法是什么? 另外,sta ...

  9. 将Java JDK安装文件提取为绿色版(免安装版)

    前言 在服务端部署Java项目时,可能会根据项目的环境考虑使用不同的JDK版本,在使用时根据不同项目切换jdk版本很不方便.另外,安装的jdk会自动安装jdk_update,但是我又不想让jdk自动更 ...

最新文章

  1. Iterator(迭代器)接口 --对象循环遍历
  2. linux重启memcache_Linux中安装Memcached服务的方法
  3. c++ vector用另一个vector初始化
  4. 阿里面试官给你的一些忠告,这样做肯定错不了!附视频
  5. BZOJ 4143 The Lawyer
  6. 经典中的品味:第二章 C++基本的对象,类型和值(上)
  7. WMS系统仓库条码管理流程解析
  8. 2021-02-01 25 个常用 Matplotlib 图的 Python 代码
  9. 【渝粤教育】广东开放大学 经济法基础 形成性考核 (52)
  10. 新版Win10开机任务栏卡死的原因和解决方法
  11. 为什么mysql不建议执行超过3表以上的多表关联查询?
  12. App开发者不再遵循苹果iOS设计惯例
  13. 2019第二届中国天津国际智慧消防高峰论坛
  14. 玩转无线路由DD-WRT特色功能
  15. 运动控制器轴回零的配置与实现
  16. C语言如何清除控制台特定的一行,及'\b'字符的使用
  17. 可以用python实现一些小发明_【kimol君的无聊小发明】—用python写图片格式批量处理工具...
  18. 古月 ROS移动机器人实战5.3ROS导航框架介绍笔记
  19. 牛小骥和严恭敏松组合中Qk的计算方法对比
  20. 地摊经济 VS 亚马逊Amazon 理性一点吧亲

热门文章

  1. android代码里 写线程,在Android线程池里运行代码任务实例
  2. java 向量上的坐标点_新高三知识点-点的平移公式
  3. 您的请求参数与订单信息不一致_长春各学校信息审核结果出炉!这些情况不符合“两个一致”...
  4. OpenFlow Switch —— 软件架构
  5. Kubernetes — PV、PVC
  6. [Nova] Failed to get shared write lock Is another process using the image?
  7. freemarker获取封装类中对象的属性(六)
  8. 原子哥的STM32视频,我发现他们都看不懂原子哥里面按键扫描程序
  9. Java GC系列(3):垃圾回收器种类
  10. 深入Android内存泄露