网络编程客户端向服务器上传文件

来源:互联网 发布:db ol联机网上数据库 编辑:程序博客网 时间:2024/05/22 05:30


服务端


import java.io.BufferedReader;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintStream;import java.net.ServerSocket;import java.net.Socket;public class file_server {/** * @param args * @throws IOException  */public static void main(String[] args) throws IOException {//3,建立多线程的服务器ServerSocket server = new ServerSocket(12345);System.out.println("服务器启动,绑定12345端口号");//4.读取文件名while(true) {final Socket socket = server.accept();//接受请求new Thread() {public void run() {try {InputStream is = socket.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(is));PrintStream ps = new PrintStream(socket.getOutputStream());String fileName = br.readLine();//5.判断文件是否存在, 将结果发回客户端File dir = new File("update");dir.mkdir();//创建文件夹File file = new File(dir,fileName);//封装成File对象if(file.exists()) {//如果服务器已经存在这个文件ps.println("存在");//将存在写给客户端socket.close();//关闭socketreturn;}else {ps.println("不存在");}//8.定义FileOutputStream, 从网络读取数据, 存储到本地FileOutputStream fos = new FileOutputStream(file);byte[] arr = new byte[8192];int len;while((len = is.read(arr)) != -1) {fos.write(arr, 0, len);}fos.close();socket.close();} catch (IOException e) {e.printStackTrace();}}}.start();}}}



客户端


import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintStream;import java.net.Socket;import java.net.UnknownHostException;import java.util.Scanner;public class file_client {/** * @param args * @throws IOException  * @throws UnknownHostException  */public static void main(String[] args) throws UnknownHostException, IOException {// 1.提示输入要上传的文件路径, 验证路径是否存在以及是否是文件夹File file = getFile();// 2.发送文件名到服务端Socket socket = new Socket("127.0.0.1", 12345);BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));PrintStream ps = new PrintStream(socket.getOutputStream());ps.println(file.getName());// 6.接收结果, 如果存在给予提示, 程序直接退出String result = br.readLine();//读取存在后不存在的结果if("存在".equals(result)) {System.out.println("您上传的文件已经存在,请不要重复上传");socket.close();return;}// 7.如果不存在, 定义FileInputStream读取文件, 写出到网络FileInputStream fis = new FileInputStream(file);byte[] arr = new byte[8192];int len;while((len = fis.read(arr)) != -1) {ps.write(arr, 0, len);}fis.close();socket.close();}private static File getFile() {Scanner sc = new Scanner(System.in);//创建键盘录入对象System.out.println("请输入一个文件路径:");while(true) {String line = sc.nextLine();File file = new File(line);if(!file.exists()) {System.out.println("您录入的文件路径不存在,请重新录入:");}else if(file.isDirectory()) {System.out.println("您录入的是文件夹路径,请输入一个文件路径:");}else {return file;}}}}





原创粉丝点击