public class SingleTranslate implements Impl{
private ExecutorService executorService = Executors.newSingleThreadExecutor();
private String parentPath;
@Override
public void sendFile(File file, List<InetSocketAddress> list) {
parentPath = file.getParent();
Stack<File> stack = new Stack<>();
dfs(file, stack);
for(InetSocketAddress sa : list) {
sendFile((Stack)stack.clone(), sa);
}
}
public void dfs(File file, Stack<File> stack) {
if(file.isFile()) {
stack.push(file);
} else {
for(File f : file.listFiles()) {
dfs(f, stack);
}
}
}
public void sendFile(Stack<File> stack, InetSocketAddress sa){
executorService.execute(() -> {
try {
Socket socket = new Socket(sa.getAddress(), sa.getPort());
DataOutputStream dos = null;
DataInputStream dis = null;
try {
dos = new DataOutputStream(socket.getOutputStream());
dos.writeInt(stack.size());// 文件数量
while(!stack.isEmpty()) {
File file = stack.pop();
dis = new DataInputStream(new FileInputStream(file));
byte[] b = new byte[10*1024];
int c = -1;
dos.writeUTF(file.getAbsolutePath().replace(parentPath, ""));// 文件名
dos.writeLong(file.length());// 文件大小
while((c = dis.read(b)) != -1) {
dos.write(b, 0 ,c);// 文件数据
dos.flush();
}
dis.close();
}
dos.close();
} catch (IOException e) {e.printStackTrace();}
finally {
dos.close();
dis.close();
socket.close();
}
}catch(IOException e) {e.printStackTrace();}
});
}
}
03-30
1264
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)