基于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);
}
}
转载于:https://www.cnblogs.com/pony/archive/2008/04/26/1172262.html
基于Java Socket的文件UpLoad代码(完美版)-用递归解决java的目录树遍历相关推荐
- 基于TCP,Socket编程,模仿腾讯QQ界面,使用Java开发的一款网络聊天工具。QQ_Chat
代码下载地址 原博客地址 QQ_Chat 基于TCP,Socket编程,模仿腾讯QQ界面,使用Java开发的一款网络聊天工具. (内含报告) 工具: Eclipse.Navicat for MySQL ...
- JAVA编程习题及答案_完美版
JAVA编程习题及答案_完美版 原创 lingwu7 最后发布于2017-08-15 20:01:12 阅读数 10796 收藏 发布于2017-08-15 20:01:12 版权声明:本文为博主原创 ...
- Java源码 JavaWeb开发框架 代码 SSH SSM OA ERP CRM Java项目[Java通用框架源码及开发视频教程]
Java源码 JavaWeb开发框架 代码 SSH SSM OA ERP CRM Java项目 功能简介: A.代码生成器(开发利器) 生成Java各层次的类和JSP等文件,提高开发效率 B.阿里巴巴 ...
- java 中传输文件的代码_java文件上传Demo(必看篇)
说到文件上传我们要做到: 1.引入两个包:commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar 2.将form改为上传文件模式:enctype=" ...
- Java Socket实现文件传输
阿里云双11服务器优惠(年度最佳优惠): A:1核2GB 1M 服务器年69元 B:1核2GB 1M 服务器三年180元 C:2核4GB 1~10M 服务器三年567元(强烈推荐) D:4核8GB 1 ...
- 配置Eclipse支持java和xml文件的代码补全功能
本文介绍如何配置Eclipse,使得在编写代码时无论是*.java还是*.xml文件都能够通过使用ALT+/快捷键实现代码不全的功能. 本文实验环境为:Windows 7 + Eclipse 一.配置 ...
- java socket 打印机_思普瑞特,小票打印机和标签打印机java网络驱动设计与实现...
网络打印走的socket连接,主流的java, php, c, c#等语言都支持socket,所以实现打印机的网络打印几乎是和语言无关的 打印机默认端口是9100 使用socket连接上打印机后,将打 ...
- java单元测试读文件数据_如何将文本文件资源读入Java单元测试?
本问题已经有最佳答案,请猛点这里访问. 我有一个单元测试需要使用位于src/test/resources/abc.xml中的XML文件.把文件的内容放到String中最简单的方法是什么? 另外,sta ...
- 将Java JDK安装文件提取为绿色版(免安装版)
前言 在服务端部署Java项目时,可能会根据项目的环境考虑使用不同的JDK版本,在使用时根据不同项目切换jdk版本很不方便.另外,安装的jdk会自动安装jdk_update,但是我又不想让jdk自动更 ...
最新文章
- Iterator(迭代器)接口 --对象循环遍历
- linux重启memcache_Linux中安装Memcached服务的方法
- c++ vector用另一个vector初始化
- 阿里面试官给你的一些忠告,这样做肯定错不了!附视频
- BZOJ 4143 The Lawyer
- 经典中的品味:第二章 C++基本的对象,类型和值(上)
- WMS系统仓库条码管理流程解析
- 2021-02-01 25 个常用 Matplotlib 图的 Python 代码
- 【渝粤教育】广东开放大学 经济法基础 形成性考核 (52)
- 新版Win10开机任务栏卡死的原因和解决方法
- 为什么mysql不建议执行超过3表以上的多表关联查询?
- App开发者不再遵循苹果iOS设计惯例
- 2019第二届中国天津国际智慧消防高峰论坛
- 玩转无线路由DD-WRT特色功能
- 运动控制器轴回零的配置与实现
- C语言如何清除控制台特定的一行,及'\b'字符的使用
- 可以用python实现一些小发明_【kimol君的无聊小发明】—用python写图片格式批量处理工具...
- 古月 ROS移动机器人实战5.3ROS导航框架介绍笔记
- 牛小骥和严恭敏松组合中Qk的计算方法对比
- 地摊经济 VS 亚马逊Amazon 理性一点吧亲
热门文章
- android代码里 写线程,在Android线程池里运行代码任务实例
- java 向量上的坐标点_新高三知识点-点的平移公式
- 您的请求参数与订单信息不一致_长春各学校信息审核结果出炉!这些情况不符合“两个一致”...
- OpenFlow Switch —— 软件架构
- Kubernetes — PV、PVC
- [Nova] Failed to get shared write lock Is another process using the image?
- freemarker获取封装类中对象的属性(六)
- 原子哥的STM32视频,我发现他们都看不懂原子哥里面按键扫描程序
- Java GC系列(3):垃圾回收器种类
- 深入Android内存泄露