前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java实现一个简单的文件上传案例

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

作者头像
一只胡说八道的猴子
发布2020-09-27 10:11:57
9130
发布2020-09-27 10:11:57
举报

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

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

在这里插入图片描述
在这里插入图片描述

下面上代码

上传单个文件

服务器端

代码语言:javascript
复制
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();

    }
}

客户端

代码语言:javascript
复制
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();
    }
}

循环上传

客户端代码

代码语言:javascript
复制
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();
    }
}

服务器端代码

代码语言:javascript
复制
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循环与一点多线程的知识,以上就是一个文件上传的一个简单案例,如有错误还请各位批评指正,喜欢我的可以点赞收藏,我会不定期更新文章,喜欢的也可以关注呀

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-07-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Java实现一个简单的文件上传案例
  • 上传单个文件
  • 循环上传
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档