1.客户端向服务器上传文件
客户端
2.提示输入要上传的文件路径File,验证路径是否有效,以及是否是文件夹,
不存在或是文件夹都需要重新录入
3.发送文件名到服务器 File.getName
6.接收结果,如果存在给予提示,否则程序直接退出
7.如果不存在,定义FileInputStream读取文件,通过网络上传
服务器
1.建立多线程服务器
4.读取文件名
5.判断文件名是否存在,将结果返回给客户端
8.接收文件
import java.io.*;
import java.net.Socket;
import java.util.Scanner;
/**
-
* Created with IntelliJ IDEA.
-
* User: yfl
-
* Date: 2019/8/20
-
* Time: 23:11
-
* To change this template use File | Settings | File Templates.
-
* Description:
-
*/
//客户端
public class Test01_Client {
public static void main(String[] args) throws IOException {
Socket socket = new Socket(“127.0.0.1”, 9999);
//String file = getFile();
String file = “E:\BD1904\src\com\briup\java\day20\note\note_day20”;
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintStream ps = new PrintStream(socket.getOutputStream());File filepath = new File(file); String name = filepath.getName(); ps.println(name); //获取客户端的反馈 String msg = br.readLine(); if ("true".equals(msg)){ System.out.println("服务器已经存在改文件,不需要再次发送"); socket.close(); return; }else if ("false".equals(msg)){ //服务器不存在改文件,上传 FileInputStream fis = new FileInputStream(filepath); int len; while ((len = fis.read())!=-1){ ps.write(len); } fis.close(); System.out.println("文件上传结束"); socket.close(); }}
//从键盘通过路径名获取一个文件名
public static String getFile() {
Scanner sc = new Scanner(System.in);
System.out.println(“请输入一个路径名”);String fileName = "E:\\BD1904\\src\\com\\briup\\java\\day20\\note\\note_day20"; while (true) { fileName = sc.nextLine(); File file = new File(fileName); if (!file.exists()) { System.out.println("路径名不存在,请重新输入"); } else if (file.isDirectory()) { System.out.println("是文件夹,重新输入"); } else { break; } } return fileName;}
}
//服务端
import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
/**
-
* Created with IntelliJ IDEA.
-
* User: yfl
-
* Date: 2019/8/20
-
* Time: 23:10
-
* To change this template use File | Settings | File Templates.
-
* Description:
-
*/
public class Test01_Server {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(9999);
System.out.println(“服务器已经启动…,端口:” + 9999);while (true){ Socket socket = server.accept(); String ip = socket.getInetAddress().getHostName(); int port = socket.getPort(); System.out.println("客户端..." + ip + ":" + port + "已连接"); new Thread(){ @Override 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(); //去指定的服务器资源目录中查看文件是否存在 File file = new File("E:\\BD1904\\src\\com\\briup\\java\\day20\\upload", filename); if (file.exists()){ System.out.println("客户端发送的文件名" + filename + "在本地资源中已经存在"); ps.println("true"); return; }else { //文件不存在,先发送一个标志,然后创建一个同名的本地文件 ps.println("false"); FileOutputStream fos = new FileOutputStream(file); byte[] bytes = new byte[1024 * 8]; int len; while ((len = is.read(bytes)) != -1){ fos.write(bytes,0,len); } fos.close(); System.out.println("读取数据完成,上传文件结束"); } }catch (Exception e){ e.printStackTrace(); }finally { if (socket == null){ try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } }.start(); }}
}

本文详细介绍了客户端与服务器间文件上传的交互过程,包括客户端输入文件路径、验证有效性、发送文件名至服务器,以及服务器判断文件是否存在并接收文件的完整流程。
712

被折叠的 条评论
为什么被折叠?



