程序地带

Java在文件上传中使用多线程


服务器:


public class TCPServer {
public static void main(String[] args) {
ServerSocket server= null;
try {
server = new ServerSocket(8888);
} catch (IOException e) {
e.printStackTrace();
}
/**让服务器一直处于监听状态
* */
while (true) {
/**使用多线程来提高程序效率
* 当有一个客户端上传文件的时候就创建一个线程来处理
* */
ServerSocket finalServer = server;
new Thread(() -> {
Socket socket=null;
OutputStream os=null;
FileOutputStream fos=null;
try {
socket= finalServer.accept();
InputStream is=socket.getInputStream();
File file=new File("E:\service");
/**判断是否存在目标文件夹
* */
if(!file.exists()){
file.mkdirs();
}
fos=new FileOutputStream(file+"\1.txt");
int len=0;
byte[] bytes=new byte[1024];
while ((len=is.read(bytes))!=-1){
fos.write(bytes,0,len);
}
os= socket.getOutputStream();
os.write("上传成功".getBytes());
} catch (IOException e) {
e.printStackTrace();
}finally {
if(socket!=null&&fos!=null&&os!=null){
try {
fos.close();
os.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}).start();
}
}
}

注意:由于使用new Thread(() -> {})的方式来实现多线程,匿名内部类中重写的是接口中的public abstract void run();函数,而该函数没有抛出异常所以需要使用try…catch捕获。这里不需要释放ServerSocket资源


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43730516/article/details/112689526

随机推荐

Spring Boot 2.x基础教程:快速入门

简介在您第1次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?在你第n次使用Spring框架的时候,是否觉得一堆反复黏贴的配置有一些厌烦&#x...

qq_24431641 阅读(889)

Spring AOP

Aop:AspectOrientedProgramming面向切面编程。AOP的优点:降低模块之间的耦合度。使系统更容易扩展。更好的代码复用。非业务代码更加集中,不分散,便...

m0_45045268 阅读(220)

2020-12-27

问题:社区版Idea: IntelliJIDEA2020.3(CommunityEdition)使用lombok插件注入日志,编译报错,提示:Y...

薛定谔的zhu 阅读(531)

e7xue.php漏洞_PHP反序列化漏洞学习

serialize:序列化unserialize:反序列化简单解释:serialize把一个对象转成字符串形式,可以用于保存unserialize把seria...

weixin_39804631 阅读(861)

3D动态页面

3D动态页面

3D动态相册如何实现创建一个文件夹,将代码图片音乐放在同一个路径下代码如下html{background:#000;height:100%;}/*最外层容器样式*/.wrap{posit...

始料未及长安 阅读(630)