一.列出莫文件夹中所有的文件和文件夹的工具类,磁盘列表类
- package upload;
- import java.io.File;
- import java.util.ArrayList;
- import java.util.List;
- public class ListFiles {
- private List<File> fileList = new ArrayList<File>();
- public void listAllFiles(File file) {
- File[] files = file.listFiles();
- for (int i = 0; i < files.length; i++) {
- if (files[i].isDirectory()) {
- if (files[i].listFiles() != null && files[i].listFiles().length > 0) {
- listAllFiles(files[i]);
- } else {
- fileList.add(files[i]);
- }
- } else {
- fileList.add(files[i]);
- }
- }
- }
- public List<File> getAllFiles(File file) {
- this.listAllFiles(file);
- return fileList;
- }
- public static void main(String[] args) {
- System.out.println(new ListFiles().getAllFiles(new File("E:\\temp\\")));
- }
- }
- package upload;
- public enum DiskName {
- C, D, E, F, G, H, I, J, K
- }
二.服务器端程序
1.文件处理
- package upload;
- import java.io.DataInputStream;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.net.Socket;
- public class UploadFileServer implements Runnable {
- private Socket socket;
- private DiskName diskName;
- public UploadFileServer(Socket socket, DiskName diskName) {
- this.socket = socket;
- this.diskName = diskName;
- }
- @Override
- public void run() {
- DataInputStream dis = null;
- FileOutputStream fos = null;
- try {
- long start = System.currentTimeMillis();
- dis = new DataInputStream(socket.getInputStream());
- String filePath = dis.readUTF();
- String fileName = filePath.substring(filePath.lastIndexOf("\\") + 1);
- String strDir = diskName.name()
- + filePath.substring(filePath.indexOf(":"), filePath.lastIndexOf("\\"))
- + File.separator;
- File d = new File(strDir);
- d.mkdirs();
- File file = new File(strDir + fileName);
- file.createNewFile();
- if (file.isFile()) {
- fos = new FileOutputStream(file);
- byte[] buffer = new byte[1024];
- int len = 0;
- while ((len = dis.read(buffer, 0, buffer.length)) > 0) {
- fos.write(buffer, 0, len);
- fos.flush();
- }
- }
- long end = System.currentTimeMillis();
- System.out.println("cost: " + ((end - start) / 1000) + " s, size: "
- + (file.length() / 1024.0) + " KB , file: " + file.getAbsolutePath());
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- if (fos != null) {
- try {
- fos.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- if (dis != null) {
- try {
- dis.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- if (socket != null) {
- try {
- socket.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
- }
2.启动类
- package upload;
- import java.io.IOException;
- import java.net.ServerSocket;
- import java.net.Socket;
- public class SocketServer {
- public static void main(String[] args) throws IOException {
- ServerSocket server = new ServerSocket(9999);
- while (true) {
- Socket socket = server.accept();
- new Thread(new UploadFileServer(socket, DiskName.D)).start();
- }
- }
- }
三.客户端程序
1.文件处理
- package upload;
- import java.io.DataOutputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.net.Socket;
- public class UploadFileClient implements Runnable {
- private Socket socket;
- private File file;
- public UploadFileClient(Socket socket, File file) {
- this.socket = socket;
- this.file = file;
- }
- @Override
- public void run() {
- DataOutputStream dos = null;
- FileInputStream fis = null;
- try {
- long start = System.currentTimeMillis();
- dos = new DataOutputStream(socket.getOutputStream());
- if (file.isFile()) {
- fis = new FileInputStream(file);
- dos.writeUTF(file.getAbsolutePath());
- byte[] sendBuffer = new byte[1024];
- int len = 0;
- while ((len = fis.read(sendBuffer, 0, sendBuffer.length)) > 0) {
- dos.write(sendBuffer, 0, len);
- dos.flush();
- }
- } else {
- dos.writeUTF(file.getAbsolutePath() + File.separator);
- }
- long end = System.currentTimeMillis();
- System.out.println("cost: " + ((end - start) / 1000) + " s, size: "
- + (file.length() / 1024.0) + " KB , file: " + file.getAbsolutePath());
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- if (dos != null) {
- try {
- dos.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- if (fis != null) {
- try {
- fis.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- if (socket != null) {
- try {
- socket.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
- }
2.启动类
- package upload;
- import java.io.File;
- import java.io.IOException;
- import java.net.InetSocketAddress;
- import java.net.Socket;
- import java.util.List;
- public class SocketClient {
- public static void main(String[] args) throws IOException {
- List<File> fileList = new ListFiles().getAllFiles(new File("E:\\java standard\\"));
- for (int i = 0; i < fileList.size(); i++) {
- Socket socket = new Socket();
- socket.connect(new InetSocketAddress("127.0.0.1", 9999));
- new Thread(new UploadFileClient(socket, fileList.get(i))).start();
- }
- }
- }