java 多线程上传解压文件

举个公司项目开发遇到的一个简单例子,用户上传压缩文件到服务器后,要对该压缩包进行两个操作,一是将该压缩包复制到指定目录,一是将该压缩包解压到另一指定目录,最终响应用户提示文件上传成功。如果压缩包很大的话,上传后进行的复制和解压功能也会占用很长时间,用户就会等待很长的时间。其实复制和解压的功能和用户操作没有直接关系,完全可以独立出来,其解决的思路如下:

当用户上传压缩文件完毕之后,我们立即创建两个线程,一是复制压缩文件的线程;二是解压压缩文件的线程。我们可以通过线程的构造方法把文件的信息传递给相应的线程,当我们启动两线程的start方法后,我们就不必再关心其复制和解压的操作,而是直接响应用户,这样用户明显感觉操作变快,而复制和解压的操作仍在后台偷偷的进行着。

实现多线程的方法有两个,一是继承Thread,二是实现接口Runnable。二者的区别不多说,继承只能单继承,而接口可以实现多个,故本人更倾向使用后者。

下面把代码模型贴出来,供大家参考参考:

[java]

package com.yjd.test;

import java.io.File;

public class FileOperate {

public static void main(String[] args) {

Long begin = System.currentTimeMillis();

// 上传文件

UploadFile uploadFile = new UploadFile();

File file = uploadFile.uploadFileMethod();

// 给线程传递参数

CoppyFile coppyFile = new CoppyFile(file);

UnZipFile unZipFile = new UnZipFile(file);

// 创建线程

Thread coppyThread = new Thread(coppyFile);

Thread unZipThread = new Thread(unZipFile);

// 启动线程

coppyThread.start();

unZipThread.start();

Long end = System.currentTimeMillis();

// 响应用户请求

System.out.println("恭喜,文件上传成功,耗时:" + (end - begin) + "毫秒");

}

}

class UploadFile {

// 文件上传

public File uploadFileMethod() {

File file = new File("filePath");

System.out.println("文件上传完毕");

return file;

}

}

class CoppyFile implements Runnable {

private File file;

public CoppyFile(File file) {

this.file = file;

}

@Override

public void run() {

coppyFileMethod(file);

}

// 文件复制

public void coppyFileMethod(File file) {

// 睡眠15秒钟

try {

Thread.sleep(15000);

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println("文件复制完毕");

}

}

class UnZipFile implements Runnable {

private File file;

public UnZipFile(File file) {

this.file = file;

}

@Override

public void run() {

unZipFileMethod(file);

}

// 文件解压

public void unZipFileMethod(File file) {

// 睡眠10秒钟

try {

Thread.sleep(10000);

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println("文件解压完毕");

}

}

时间: 2024-10-06 15:33:03

java 多线程上传解压文件的相关文章

mac通过自带的ssh连接Linux服务器并上传解压文件

需求: 1:mac连接linux服务器 2:将mac上的文件上传到linux服务器指定位置 3:解压文件 mac上使用命令,推荐使用 iterm2 .当然,也可以使用mac自带的终端工具. 操作过程: 一: mac连接linux服务器 输入命令连接Linux服务器: ssh [email protected] 其中: username为登录Linux服务器所需的用户名,ip为服务器的地址.默认端口号为22,如果要指定端口号,使用 -p port // 以下两种方式都可以 ssh [email p

Java 上传解压zip文件,并且解析文件里面的excel和图片

需求:上传一个zip文件,zip文件里面包含一个excel和很多图片,需要把excel里面的信息解析出来保存到表中,同时图片也转化成base64保存到数据库表中. PS:为了方便不同水平的开发人员阅读,我把代码全部写到Controller里面.这个demo的file入参的类型是MultipartFile,很多网上的例子是File类型.这两个类型在解析文件的时候还是有点区别的. 第①个方法: 1 /** 2 * 这个deomo入参的类型是MultipartFile,很多网上的例子是File类型 3

java FTP上传和下载文件

1 package com.ftp; 2 3 /** 4 * ftp链接常量 5 * 6 */ 7 public class Ftp { 8 9 private String ipAddr;//ip地址 10 11 private Integer port;//端口号 12 13 private String userName;//用户名 14 15 private String pwd;//密码 16 17 private String path;//aaa路径 18 19 public St

Python 用多线程上传和下载文件

1 # -*- coding: utf-8 -*- 2 __author__ = 'louis' 3 4 from ftplib import FTP 5 import multiprocessing 6 import time 7 8 9 def ftpconnect(): 10 ftp = FTP() 11 timeout = 30 12 port = 22 13 ftp.connect('localhost',port,timeout) # 连接FTP服务器 14 ftp.login('u

ubantu上常用解压文件的命令

.tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName 注:tar是打包,不是压缩! ~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~ .gz 解压1:gunzip FileName.gz 解压2:gzip -d FileName.gz 压缩:gzip FileName ~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.

FastDfs java客户端上传、删除文件

#配置文件 connect_timeout = 2 network_timeout = 30 charset = UTF-8 http.tracker_http_port = 9090 http.anti_steal_token = no http.secret_key = FastDFS1234567890 tracker_server = 192.168.248.128:22122 #tracker_server = 192.168.0.119:22122   package com.ena

java Ftp上传创建多层文件的代码片段

StringBuilder sBuilder = new StringBuilder();            String[] pah = path.split("/");            // 先创建目录,在转到当前目录,再保存文件            // 分层创建目录            for (String pa : pah)            {                if (StringUtils.isNotBlank(pa))         

本地上传文件至服务器的技巧(linux文件压缩及解压文件)

linux(ubuntu)文件解压及压缩文件 ubuntu支持文件的解压及压缩功能, 如果ubuntu上面没有安装过unzip工具的话,可以通过下面命令安装: sudo apt-get install unzip zip压缩文件夹,文件及解压文件的命令 1.压缩文件夹 zip -r 目标文件名.zip 要压缩的文件夹 2.把文件 unzip 文件 目的地 把/home目录下面的mydata.zip解压到mydatabak目录里面 3.把文件解压到当前目录 unzip 要解压的文件 其他的详细请查

大数据技术之_18_大数据离线平台_02_Nginx+Mysql+数据收集+Web 工程 JS/JAVA SDK 讲解+Flume 故障后-如何手动上传 Nginx 日志文件至 HDFS 上

十一.Nginx11.1.介绍11.2.常见其他 Web 服务器11.3.版本11.4.Nginx 安装11.5.目录结构11.6.操作命令十二.Mysql12.1.介绍12.2.关系型数据库(SQL)种类12.3.特征12.4.术语12.4.与非关系型数据库比较(Not Only SQL)12.4.1.种类12.4.2.特征12.4.3.总结十三.数据收集13.1.收集方式13.2.数据的事件类型13.2.1.Launch 事件13.2.2.PageView 事件13.3.Nginx 日志收集