使用java的流从客服端向服务端传送文件

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class InternetSendFile {
    public static String verify() throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        while (true) {
            System.out.println("请输入要上传的文件的路径:");
            String src = bufferedReader.readLine();
            File file = new File(src);
            if (file.exists() && file.isFile()) {
                System.out.println("存在此文件");
                return src;
            } else {
                System.out.println("不存在此文件,请重新输入!");
            }
        }
    }
}

class Client2 {
    //    客户端
//    2.提示输入要上传的文件路径File,验证路径是否有效,以及是否是文件夹,不存在或是文件夹都需要重新录入
//    3.发送文件名到服务器  File.getName
//    6.接收结果,如果存在给予提示,否则程序直接退出
//    7.如果不存在,定义FileInputStream读取文件,通过网络上传
    public static void main(String[] args) throws IOException {
        String src = InternetSendFile.verify();
        Socket socket = new Socket("127.0.0.1", 12345);
        OutputStream outputStream = socket.getOutputStream();
        InputStream inputStream = socket.getInputStream();
        BufferedReader br1 = new BufferedReader(new InputStreamReader(inputStream));
        BufferedOutputStream bos = new BufferedOutputStream(outputStream);
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("请输入传入服务器的文件路径!");
        String s = bufferedReader.readLine();
        bos.write(s.getBytes());
        bos.flush();
        while (true) {
            int flag = Integer.parseInt(br1.readLine());
            if (flag == 0) {
                System.out.println("可以传输文件了");
                break;
            } else {
                System.out.println("存在此文件,请重新输入文件路径!");
                s = bufferedReader.readLine();
                bos.write(s.getBytes());
                bos.flush();
            }
        }
        FileInputStream fileInputStream = new FileInputStream(src);
        BufferedInputStream bis = new BufferedInputStream(fileInputStream);
        byte[] bytes = new byte[1024];
        int length = 0;
        String stt=null;
        while ((length=bis.read(bytes))!=-1){
            bos.write(bytes, 0, length);
            bos.flush();
        }
        bos.close();
        socket.close();
    }
}

class Server2 {
    //        1.建立多线程服务器
//    4.读取文件名
//    5.判断文件名是否存在,将结果返回给客户端
//    8.接收文件
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(12345);
        new Thread() {
            @Override
            public void run() {
                Socket accept = null;
                try {
                    accept = serverSocket.accept();
                    InputStream inputStream = accept.getInputStream();
                    OutputStream outputStream = accept.getOutputStream();
                    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(outputStream));
                    PrintStream printStream = new PrintStream(outputStream);
                    BufferedInputStream bis = new BufferedInputStream(inputStream);
                    String destring = null;
                    while (true) {
                        byte[] bytes = new byte[1024];
                        int length = 0;
                        String des = null;
                        while ((length = bis.read(bytes)) != -1) {
                            des += new String(bytes, 0, length);
                            break;
                        }
                        destring = des.substring(4);
                        System.out.println(destring);
                        File file = new File(destring);
                        if (file.exists() && file.isFile()) {
                            //存在此文件,请修改文件名!
                            printStream.println(1);
                            printStream.flush();
                        } else {
                            //不存在此文件,请上传!
                            printStream.println(0);
                            printStream.flush();
                            break;
                        }
                    }
                    FileOutputStream fileOutputStream = new FileOutputStream(destring);
                    BufferedOutputStream bos = new BufferedOutputStream(fileOutputStream);
                    byte[] bytes1 = new byte[1024];
                    int length2 = 0;
                    while ((length2 = bis.read(bytes1)) != -1) {
                        //打印输出是否读到文件数据
//                        String s = new String(bytes1, 0, length2);
//                        System.out.println(s);
                        bos.write(bytes1, 0, length2);
                        bos.flush();
                    }
                    bos.close();
                    bis.close();
                    accept.close();
                    serverSocket.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }.start();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值