上次用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编程中,遍历文件目录并生成树结构的文本文件是一个常见的任务,尤其是在处理大量文件数据时。这个任务可以通过使用Java的`java.io.File`类及其相关API来实现。`Dir.class`和`Dir.java`是这次操作的核心文件,...
在提供的"二叉树的递归和非递归遍历"压缩包文件中,可能包含了Java源代码,演示了如何实现这两种遍历方式。通过阅读和理解这些代码,你可以更好地掌握二叉树遍历的原理和实践,这对于理解和解决涉及二叉树的算法问题...
遍历递归的先中後序, 非递归的先中後序, 计算出深度 结点数 /* 运行结果: ------------------------ 请先序输入二叉树(如:ab三个空格表示a为根节点,b为左子树的二叉树) ab c 先序递归遍历二叉树: a b c 先序...
对于C#开发者来说,理解如何非递归地后序遍历文件目录树是非常有用的技能。后序遍历通常指的是先访问子节点,再访问父节点的遍历顺序。这种遍历方式在处理复杂的文件结构时尤其有用,例如在计算文件大小、执行清理...
本教程将详细讲解这两个主题,包括Java如何进行文件遍历,以及如何使用非递归方法实现树的前序、中序和后序遍历。 首先,我们来看Java文件遍历。在Java中,`java.io.File`类提供了对文件和目录的操作。通过`list()`...
为了实现这个功能,我们可以使用递归遍历文件夹和文件,并将其存入 TreeView 中。本文将详细介绍如何使用递归遍历文件夹和文件,并将其存入 TreeView 中。 一、概述 在 ASP.NET 中,我们可以使用 TreeView 控件来...
在C++编程中,遍历目录树是一项常见的任务,它涉及到访问和处理文件系统中的文件和子目录。这个过程通常用于文件操作、备份、搜索、清理等场景。下面我们将详细探讨如何在C++中实现这一功能。 遍历目录树的核心在于...
在实际编程中,我们可能需要实现这些遍历策略,例如在给定的"二叉树的实现"文件中,可能包含了具体的代码示例,用于演示如何使用非递归方式遍历二叉树。通过学习这些代码,我们可以加深对非递归遍历的理解,并能应用...
理解递归遍历后,非递归遍历的关键在于使用额外的数据结构(如栈或队列)来跟踪当前的遍历状态。非递归遍历的优势在于它避免了函数调用栈的深度限制,对于非常深的树,递归可能会导致栈溢出。 在实际编程中,根据...
/*选择二叉链式存储结构作为二叉树的存储结构,设计一个程序实现二叉树的基本操作(包括建立、输出、前序遍历、中序遍历、后序遍历、求树高、统计叶子总数等) 【实验内容】 必做内容 程序的菜单功能项如下: 1----...
标题"Java 遍历文件夹内文件"所指的就是使用`File`类及其相关方法来查找和访问一个目录下的所有文件和子目录。例如,你可以使用`listFiles()`方法来获取目录下的所有文件和子目录,它会返回一个`File`对象数组。但要...
在给定的标题“递归遍历目录并生成树”中,涉及的核心技术是递归算法和Windows API的使用,特别是与文件系统交互的部分。这个任务可以通过使用MFC(Microsoft Foundation Classes)中的`CTreeCtrl`控件来实现,它...
在Java编程语言中,遍历一个目录下的所有文件和子目录是一项常见的...综上所述,遍历Java目录下的所有文件和子目录涉及`File`类的使用,以及递归遍历的概念。在处理文件系统操作时,正确理解和应用这些概念至关重要。
递归遍历的优点在于其代码简洁明了,但缺点是当处理大规模的二叉树时,递归可能会导致栈溢出,因为每次递归调用都会增加栈的深度。 **非递归遍历** 1. **前序遍历**: - 使用一个栈来保存待访问的节点。 - 将根...
### Java版二叉树遍历非递归程序详解 #### 一、引言 在计算机科学领域中,二叉树是一种常见的数据结构,其在算法设计、数据存储以及搜索等方面有着广泛的应用。对于二叉树的操作,遍历是其中非常重要的一项技术。...
在Java中,递归可以创建简洁的代码来处理树形结构,如文件系统目录。 2. **文件系统API**: Java提供了`java.io.File`类来处理文件和目录操作。`File`对象代表文件或目录路径名,并提供了一些方法,如`list()`, `...
Java递归遍历文件目录代码实例是Java中的一种常见的遍历方法,它可以将文件目录中的文件和文件夹进行递归遍历,并对其中的文件进行读取和处理。本篇文章将详细介绍Java递归遍历文件目录代码实例的实现过程,并提供...
本压缩包包含的是关于树的遍历,特别是递归和非递归实现方式的工程源码,这些代码基于C++语言,存放在Dep工程文件夹中。 首先,我们要理解什么是树的遍历。树遍历是指按照特定顺序访问树的所有节点。通常,有三种...
在Java编程中,遍历文件目录是一项常见的任务...以上就是使用Java遍历文件目录并进行文件操作的基本知识,包括如何区分文件和目录,以及如何使用流方式拷贝文件。这些技能对于任何Java开发者来说都是非常基础且实用的。
在计算机科学中,文件系统递归是指通过遍历文件系统(通常是从根目录开始)来处理目录及其子目录下的所有文件的过程。这种方法常用于搜索特定类型的文件、统计文件数量或者进行文件系统的备份操作。 **实现细节:**...