`
totoxian
  • 浏览: 1074419 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

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

阅读更多

上次用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);
}

}

分享到:
评论

相关推荐

    java遍历文件目录生成树结构txt文件

    在Java编程中,遍历文件目录并生成树结构的文本文件是一个常见的任务,尤其是在处理大量文件数据时。这个任务可以通过使用Java的`java.io.File`类及其相关API来实现。`Dir.class`和`Dir.java`是这次操作的核心文件,...

    java实现的二叉树的递归和非递归遍历

    在提供的"二叉树的递归和非递归遍历"压缩包文件中,可能包含了Java源代码,演示了如何实现这两种遍历方式。通过阅读和理解这些代码,你可以更好地掌握二叉树遍历的原理和实践,这对于理解和解决涉及二叉树的算法问题...

    二叉树的操作--递归非递归遍历、结点个数、树深度

    遍历递归的先中後序, 非递归的先中後序, 计算出深度 结点数 /* 运行结果: ------------------------ 请先序输入二叉树(如:ab三个空格表示a为根节点,b为左子树的二叉树) ab c 先序递归遍历二叉树: a b c 先序...

    C#非递归后序遍历文件目录树

    对于C#开发者来说,理解如何非递归地后序遍历文件目录树是非常有用的技能。后序遍历通常指的是先访问子节点,再访问父节点的遍历顺序。这种遍历方式在处理复杂的文件结构时尤其有用,例如在计算文件大小、执行清理...

    Java文件遍历以及树的三种非递归遍历, 前后序编码

    本教程将详细讲解这两个主题,包括Java如何进行文件遍历,以及如何使用非递归方法实现树的前序、中序和后序遍历。 首先,我们来看Java文件遍历。在Java中,`java.io.File`类提供了对文件和目录的操作。通过`list()`...

    [ASP.NET(C#)] - 利用递归遍历文件夹和文件存入TreeView

    为了实现这个功能,我们可以使用递归遍历文件夹和文件,并将其存入 TreeView 中。本文将详细介绍如何使用递归遍历文件夹和文件,并将其存入 TreeView 中。 一、概述 在 ASP.NET 中,我们可以使用 TreeView 控件来...

    遍历目录树 遍历目录树 遍历目录树 遍历目录树

    在C++编程中,遍历目录树是一项常见的任务,它涉及到访问和处理文件系统中的文件和子目录。这个过程通常用于文件操作、备份、搜索、清理等场景。下面我们将详细探讨如何在C++中实现这一功能。 遍历目录树的核心在于...

    数据结构-非递归遍历二叉树

    在实际编程中,我们可能需要实现这些遍历策略,例如在给定的"二叉树的实现"文件中,可能包含了具体的代码示例,用于演示如何使用非递归方式遍历二叉树。通过学习这些代码,我们可以加深对非递归遍历的理解,并能应用...

    数据结构二叉树遍历递归,非递归

    理解递归遍历后,非递归遍历的关键在于使用额外的数据结构(如栈或队列)来跟踪当前的遍历状态。非递归遍历的优势在于它避免了函数调用栈的深度限制,对于非常深的树,递归可能会导致栈溢出。 在实际编程中,根据...

    二叉树的各种遍历

    /*选择二叉链式存储结构作为二叉树的存储结构,设计一个程序实现二叉树的基本操作(包括建立、输出、前序遍历、中序遍历、后序遍历、求树高、统计叶子总数等) 【实验内容】 必做内容 程序的菜单功能项如下: 1----...

    Java 遍历文件夹内文件

    标题"Java 遍历文件夹内文件"所指的就是使用`File`类及其相关方法来查找和访问一个目录下的所有文件和子目录。例如,你可以使用`listFiles()`方法来获取目录下的所有文件和子目录,它会返回一个`File`对象数组。但要...

    递归遍历目录并生成树

    在给定的标题“递归遍历目录并生成树”中,涉及的核心技术是递归算法和Windows API的使用,特别是与文件系统交互的部分。这个任务可以通过使用MFC(Microsoft Foundation Classes)中的`CTreeCtrl`控件来实现,它...

    遍历目录下所有的文件_遍历文件夹文件_java遍历目录下所有文件_

    在Java编程语言中,遍历一个目录下的所有文件和子目录是一项常见的...综上所述,遍历Java目录下的所有文件和子目录涉及`File`类的使用,以及递归遍历的概念。在处理文件系统操作时,正确理解和应用这些概念至关重要。

    二叉树递归与非递归遍历

    递归遍历的优点在于其代码简洁明了,但缺点是当处理大规模的二叉树时,递归可能会导致栈溢出,因为每次递归调用都会增加栈的深度。 **非递归遍历** 1. **前序遍历**: - 使用一个栈来保存待访问的节点。 - 将根...

    Java版二叉树遍历非递归程序

    ### Java版二叉树遍历非递归程序详解 #### 一、引言 在计算机科学领域中,二叉树是一种常见的数据结构,其在算法设计、数据存储以及搜索等方面有着广泛的应用。对于二叉树的操作,遍历是其中非常重要的一项技术。...

    递归实现遍历目录下子所有目录内所有文件

    在Java中,递归可以创建简洁的代码来处理树形结构,如文件系统目录。 2. **文件系统API**: Java提供了`java.io.File`类来处理文件和目录操作。`File`对象代表文件或目录路径名,并提供了一些方法,如`list()`, `...

    Java递归遍历文件目录代码实例

    Java递归遍历文件目录代码实例是Java中的一种常见的遍历方法,它可以将文件目录中的文件和文件夹进行递归遍历,并对其中的文件进行读取和处理。本篇文章将详细介绍Java递归遍历文件目录代码实例的实现过程,并提供...

    树的遍历,递归和非递归实现方式,工程源码

    本压缩包包含的是关于树的遍历,特别是递归和非递归实现方式的工程源码,这些代码基于C++语言,存放在Dep工程文件夹中。 首先,我们要理解什么是树的遍历。树遍历是指按照特定顺序访问树的所有节点。通常,有三种...

    java 遍历文件目录

    在Java编程中,遍历文件目录是一项常见的任务...以上就是使用Java遍历文件目录并进行文件操作的基本知识,包括如何区分文件和目录,以及如何使用流方式拷贝文件。这些技能对于任何Java开发者来说都是非常基础且实用的。

    文件递归-XML递归-树图递归

    在计算机科学中,文件系统递归是指通过遍历文件系统(通常是从根目录开始)来处理目录及其子目录下的所有文件的过程。这种方法常用于搜索特定类型的文件、统计文件数量或者进行文件系统的备份操作。 **实现细节:**...

Global site tag (gtag.js) - Google Analytics