java编写实现网络文件传输功能的方法_java上传文件接口请求

java编写实现网络文件传输功能的方法_java上传文件接口请求packagecom.softeem.fileserver;importjava.io.File;importjava.io.IOException;importjava.net.ServerSocket;importjava.net.Socket;/***服务器*/publicclassServer{ publicstaticvoidmain…

java编写实现网络文件传输功能的方法_java上传文件接口请求"

package com.softeem.fileserver;

import java.io.File;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 服务器
 */
public class Server {

	public static void main(String[] args) throws IOException {
		
		File dir = new File("D:\\teach\\express\\J1806\\课程\\part2-java高级\\20180726\\video");
		//创建一个服务
		ServerSocket ss = new ServerSocket(7777);
		System.out.println("Softeem文件服务器已启动...");
		while(true){
			//监听一个客户端连接
			Socket s = ss.accept();
			System.out.println("客户端连接:"+s.getInetAddress());
			//针对当前产生的Socket开启文件服务
			FileService fs = new FileService(s);
			//设置目标目录
			fs.setDir(dir);
			//启动服务
			fs.start();
		}
	}
}



package com.softeem.fileserver;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;

/**
 * 提供文件服务的类(多线程服务)
 */
public class FileService extends Thread{

	private Socket s;
	private File dir;
	
	public FileService(Socket s){
		this.s = s;
	}

	public void setDir(File dir) {
		this.dir = dir;
	}
	
	@Override
	public void run() {
		BufferedInputStream bis = null;
		try {
			//1.获取目录中的所有文件列表
			File[] files = dir.listFiles();
			//准备map集合以编号->文件的方式存储文件信息
			Map<String,File> map = new HashMap<>();
			for(int i = 0;i<files.length;i++){
				map.put(String.valueOf(i + 1), files[i]);
			}
			//2.将文件列表发送到客户端
			ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream());
			//发送对象到客户端Socket中
			oos.writeObject(map);
			//3.接收客户端的指令(需要下载的文件编号)
			BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
			String no = br.readLine();
			//4.根据文件编号找到指定文件并获取该文件的输入流
			File target = map.get(no);
			bis = new BufferedInputStream(new FileInputStream(target));
			//5.获取客户端Socket的输出流将读取的文件内容写出去
			//获取基于socket的输出流,向客户端发送文件数据
			BufferedOutputStream bos = new BufferedOutputStream(s.getOutputStream());
			byte[] b = new byte[1024];
			int len = 0;
			while((len = bis.read(b)) != -1){
				bos.write(b, 0, len);
			}
			bos.close();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				if(s != null){
					s.close();
				}
				if(bis != null){
					bis.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
}



package com.softeem.fileserver;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class Client {

	public static void main(String[] args) throws UnknownHostException, IOException, ClassNotFoundException {
		
		//连接到指定地址指定端口服务
		Socket s = new Socket("192.168.4.254",7777);
		//获取基于Socket的对象输入流(Map)
		ObjectInputStream ois = new ObjectInputStream(s.getInputStream());
		//读取一个对象
		Map<String,File> map = (Map<String,File>)ois.readObject();
		//获取map集合中的键集
		Set<String> keys = map.keySet();
		//获取set对象的迭代器
		Iterator<String> it = keys.iterator();
		//迭代
		while(it.hasNext()){
			//获取迭代器中的一个元素
			String key = it.next();
			//根据键获取值
			File value = map.get(key);
			System.out.println(key+"----"+value.getName());
		}
		System.out.println("请输入需要下载的文件编号:");
		//获取基于控制台标准输入流,读取指令
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String no = br.readLine();
		//根据编号或许需要下载的文件的文件名
		String fname = map.get(no).getName();
		
		//发送指令到服务器
		PrintWriter pw = new PrintWriter(s.getOutputStream());
		pw.println(no);
		pw.flush();
		
		//准备本地文件的输出流,存储来自socket的输入流中文件数据
		BufferedInputStream bis = new BufferedInputStream(s.getInputStream());
		BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(fname));
		byte[] b = new byte[1024];
		int len = 0;
		System.out.println("开始下载...");
		while((len = bis.read(b)) != -1){
			bos.write(b,0,len);
		}
		System.out.println("下载完成!");
		s.close();
		bos.close();
		br.close();
	}
}

 

今天的文章java编写实现网络文件传输功能的方法_java上传文件接口请求分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/58349.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注