sunhui.y 发表于 2013-1-28 19:18:30

java简单网络文件传输

简单实现文件在网络中的传输,要实现高级功能,在此基础上进行修改即可。
分2个类实现,FileSender负责文件发送,FileIncepter负责文件接受:
 

import java.io.BufferedInputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class FileSender {private ServerSocket ss = null;public FileSender() {}public void startSend(String filePath, int port) {// socket输出流DataOutputStream os = null;// 文件输入流DataInputStream is = null;// 建立socket连接Socket socket = null;try {// 选择进行传输的文件File file = new File(filePath);// 建立socket监听ss = new ServerSocket(port);socket = ss.accept();os = new DataOutputStream(socket.getOutputStream());// 将文件名及长度传给客户端。这里要真正适用所有平台,例如中文名的处理,还需要加工,// 具体可以参见Think In Java 4th里有现成的代码。os.writeUTF(file.getName());os.flush();os.writeLong((long) file.length());os.flush();is = new DataInputStream(new BufferedInputStream(new FileInputStream(filePath)));// 缓冲区大小int bufferSize = 8192;// 缓冲区byte[] buf = new byte;// 传输文件while (true) {int read = 0;if (is != null) {read = is.read(buf);}if (read == -1) {break;}os.write(buf, 0, read);}os.flush();} catch (IOException e) {e.printStackTrace();} finally {// 关闭所有连接try {if (os != null)os.close();} catch (IOException e) {}try {if (is != null)is.close();} catch (IOException e) {}try {if (socket != null)socket.close();} catch (IOException e) {}try {if (ss != null)ss.close();} catch (IOException e) {}}}public static void main(String[] args) {new FileSender().startSend("E:\\JDK_API_1_6_zh_CN.CHM", 8821);}} 

import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.FileOutputStream;import java.io.IOException;import java.net.Socket;import java.net.UnknownHostException;public class FileIncepter {public FileIncepter() {}public void getFile(String savePath, String ip, int port) {// 建立socket连接Socket socket = null;try {socket = new Socket(ip, port);} catch (UnknownHostException e1) {e1.printStackTrace();} catch (IOException e1) {e1.printStackTrace();}// 建立socket输入流DataInputStream inputStream = null;try {inputStream = new DataInputStream(new BufferedInputStream(socket.getInputStream()));} catch (IOException e1) {e1.printStackTrace();}try {// 缓冲区大小int bufferSize = 8192;// 缓冲区byte[] buf = new byte;int passedlen = 0;long len = 0;// 获取文件名称savePath += inputStream.readUTF();DataOutputStream fileOut = new DataOutputStream(new BufferedOutputStream(new BufferedOutputStream(new FileOutputStream(savePath))));// 获取文件长度len = inputStream.readLong();System.out.println("文件的长度为:" + len + "KB");System.out.println("开始接收文件!");// 获取文件while (true) {int read = 0;if (inputStream != null) {read = inputStream.read(buf);}passedlen += read;if (read == -1) {break;}System.out.println("文件接收了" + (passedlen * 100 / len) + "%");fileOut.write(buf, 0, read);}System.out.println("接收完成,文件存为" + savePath);fileOut.close();} catch (Exception e) {e.printStackTrace();return;}}public static void main(String[] args) {new FileIncepter().getFile("F:\\", "localhost", 8821);}}
页: [1]
查看完整版本: java简单网络文件传输