java文件上传实例_Java实现一个简单的文件上传案例示例代码

本文介绍了如何使用Java实现一个简单的文件上传功能。客户端通过Socket连接服务器,读取本地文件并写入服务器的输出流,服务器端接收数据并保存到指定路径。文章提供了完整的服务器端和客户端代码示例,包括循环接收文件的服务器端改进。这是一个基础的文件传输应用,适合初学者了解网络编程和文件操作。

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

实现流程:

1.客户端从硬盘读取文件数据到程序中

2.客户端输出流,写出文件到服务端

3.服务端输出流,读取文件数据到服务端中

4.输出流,写出文件数据到服务器硬盘中

ced27ff16acd939d15c0b990cd751dbc.png

下面上代码

上传单个文件

服务器端

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循环与一点多线程的知识,以上就是一个文件上传的一个简单案例,

到此这篇关于Java实现一个简单的文件上传案例示例代码的文章就介绍到这了,更多相关Java实现文件上传案例内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值