zoukankan      html  css  js  c++  java
  • Java实现一个简单的文件上传案例

    Java实现一个简单的文件上传案例

    实现流程:
    1.客户端从硬盘读取文件数据到程序中
    2.客户端输出流,写出文件到服务端
    3.服务端输出流,读取文件数据到服务端中
    4.输出流,写出文件数据到服务器硬盘中

    在这里插入图片描述
    下面上代码

    上传单个文件

    服务器端

    package FileUpload;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    public class Server {
        public static void main(String[] args) throws IOException {
            System.out.println("服务器端启动");
            //创建一个服务器端对象
            ServerSocket serverSocket = new ServerSocket(8888);
            //使用accept获取socket对象
            Socket accept = serverSocket.accept();
            //使用字节输入流读取
            InputStream inputStream = accept.getInputStream();
            //创建一个字节输出流输出到本地
            FileOutputStream fileOutputStream = new FileOutputStream("F:\this\copy1.jpg",true);
            //创建一个数组循环读取
            byte[] bytes = new byte[1024];
            int len;
            while ((len=inputStream.read(bytes))!=-1){
                fileOutputStream.write(bytes,0,len);
            }
            System.out.println("执行完毕");
           fileOutputStream.close();
           inputStream.close();
    
        }
    }
    

    客户端

    package FileUpload;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.Socket;
    public class Client {
        public static void main(String[] args) throws IOException {
            //创建一个Socket对象
            Socket socket = new Socket("127.0.0.1", 8888);
            //读取本地文件
            FileInputStream fileInputStream = new FileInputStream("F:\1.jpeg");
            //获取输出流向服务器写入数据
            OutputStream outputStream = socket.getOutputStream();
            //创建数组读取
            byte[] bytes = new byte[1024];
            int len;
            //边都边写
            while((len=fileInputStream.read(bytes))!=-1){
                outputStream.write(bytes,0,len);
                outputStream.flush();
            }
            //由于不会写入-1所以调用socket的shutdownOutput方法把前面的数据都写入并且正常终止后面的序列
            socket.shutdownOutput();
            System.out.println("文件发送完毕");
            fileInputStream.close();
            outputStream.close();
            socket.close();
        }
    }
    

    循环上传

    客户端代码

    package FileUpload;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.Socket;
    public class Client {
        public static void main(String[] args) throws IOException {
            //创建一个Socket对象
            Socket socket = new Socket("127.0.0.1", 8888);
            //读取本地文件
            FileInputStream fileInputStream = new FileInputStream("F:\1.jpeg");
            //获取输出流向服务器写入数据
            OutputStream outputStream = socket.getOutputStream();
            //创建数组读取
            byte[] bytes = new byte[1024];
            int len;
            //边都边写
            while((len=fileInputStream.read(bytes))!=-1){
                outputStream.write(bytes,0,len);
                outputStream.flush();
            }
            //由于不会写入-1所以调用socket的shutdownOutput方法把前面的数据都写入并且正常终止后面的序列
            socket.shutdownOutput();
            System.out.println("文件发送完毕");
            fileInputStream.close();
            outputStream.close();
            socket.close();
        }
    }
    

    服务器端代码

    package FileUpload;
            import java.io.FileOutputStream;
            import java.io.IOException;
            import java.io.InputStream;
            import java.net.ServerSocket;
            import java.net.Socket;
    public class Server {
        public static void main(String[] args) throws IOException {
            System.out.println("服务器端启动");
            //创建一个服务器端对象
            ServerSocket serverSocket = new ServerSocket(8888);
            //使用while()持续写入数据
            while(true){
                //使用accept获取socket对象
                Socket accept = serverSocket.accept();
                //Socket对象交给子线程处理,进行读写操作,
                new Thread(() ->{
                   {
                        //使用字节输入流读取
                        InputStream inputStream = null;
                        try {
                            //文件名
                            String name = new String("F:\this\"+ System.currentTimeMillis()+"copy1.jpg" );
                            inputStream = accept.getInputStream();
                            //创建一个字节输出流输出到本地
                            FileOutputStream fileOutputStream = new FileOutputStream(name,true);
                            //创建一个数组循环读取
                            byte[] bytes = new byte[1024];
                            int len;
                            while ((len=inputStream.read(bytes))!=-1){
                                fileOutputStream.write(bytes,0,len);
                            }
                            System.out.println("执行完毕");
                            fileOutputStream.close();
                            inputStream.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }).start();
            }
    
        }
    }
    

    循环输入无非就是增加了一个while循环与一点多线程的知识,以上就是一个文件上传的一个简单案例,如有错误还请各位批评指正,喜欢我的可以点赞收藏,我会不定期更新文章,喜欢的也可以关注呀

    在这里插入图片描述

  • 相关阅读:
    bzoj3505[CQOI2014]数三角形
    COGS103&tyvj1899 [NOIP2002]矩形覆盖
    bzoj4318OSU &tyvj1952 Easy
    tyvj1863[Poetize I]黑魔法师之门
    hook框架frida某个类下的所有方法名字模板
    逆向so文件调试工具ida基础知识点
    linux上安装mitmproxy
    linux配置SOCK5代理
    hook框架frida 绕过fillder证书认证
    LeetCode 455. 分发饼干
  • 原文地址:https://www.cnblogs.com/pjhaymy/p/13357520.html
Copyright © 2011-2022 走看看