一.列出莫文件夹中所有的文件和文件夹的工具类,磁盘列表类
package upload;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class ListFiles {
private List fileList = new ArrayList();
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 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 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();
}
}
}