由于工作需要,需要定时去某个url地址下载相应的文件!
spring配置文件(只贴了增加的内容):
<!-- 定时任务:调度器 -->
<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<!-- 触发列表 -->
<ref bean="cronTrigger"></ref>
</list>
</property>
</bean>
<!-- 触发器 -->
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<!-- 配置job任务 -->
<property name="jobDetail" ref="myjobTask"></property>
<!-- 配置执行时间 -->
<property name="cronExpression" value="0/30 * * * * ?"></property>
</bean>
<!-- job处理类(自己写的业务处理job,需要实现Job接口) -->
<bean name="myjobTask" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass" value="com.ls.job.DocumentDownJob"></property>
</bean>
Maven的pom.xml需要增加一个Jar包:
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
就是我们定时任务需要用到的Jar包。这样配置基本就搞定了!代码:
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import org.apache.commons.io.FileUtils;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class DocumentDownJob implements Job {
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
Calendar time = Calendar.getInstance();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
System.out.println("current time is :" + df.format(time.getTime()));
String timeName = df.format(time.getTime());
System.out.println("Hellow Word!");
URL url = null;
try {
url = new URL("http://localhost:8081/ifeweb/static/test.txt");
} catch (MalformedURLException e1) {
System.out.println("paochu异常");
e1.printStackTrace();
}
File f = new File("D:\\1111\\11\\"+timeName+".txt");
if (f.exists()) {
System.out.println("删除已有文件!");
f.delete();
} else if (!f.getParentFile().exists()) {
f.getParentFile().mkdirs();
}
try {
FileUtils.copyURLToFile(url, f);
} catch (IOException e) {
System.out.println("下载出现异常!!!!");
return;
}
System.out.println("下载成功!!!!");
}
}
这里有必要提一下apache的FileUtils工具类,觉得挺好用的,省下许多代码。(不需要url.openStream()然后再把输入流的内容转换为输出流到指定输出文件)
PS:在网上查了许多资料,不知道大家是怎么批量下载某个目录下面的文件的?有用FtpClient的,但是需要密码。如果是http协议的,我认为需要服务器提供那个目录下的文件列表,即:文件的名字即可循环下载!这样比较合理一些!具体实现细节不难,就不再多说了!各位大神是不是有更好的方法,推荐一下!