多线程查询FTP Server上的文件
情形是这样的,最近做一个自动化的项目,当batch跑成功了,FTP Server上会有特定的生成文件。但是不确定是什么时候会有,大概是batch跑完了5分钟之内吧,所以在脚本里设置检查点的时候,需要每隔一段时间去刷新FTP Server上的文件。
网上下了个Serv-U去搭建了个本地的FTP Server,很容易就搭建调试好。然后又下了个commons-net-3.3.jar包去处理FTP相关的业务。
或许可以不需要用多线程,但是试了下,单线程的去退出再重新登录到FTP Server,FTP Server上的文件并不会自动刷新。所以我在main函数里,每隔一段时间就启动一个线程去看看我要找的文件是否存在。
import java.io.IOException; import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply; public class FTPUtil extends Thread {
private FTPClient ftpClient = new FTPClient();
private String ftpdict = ".";
private boolean flag;
private static boolean find = false;
private static long timeslot = 10000; public boolean connect(String host, int port, String username,
String password) throws IOException {
ftpClient.connect(host, port);
if (FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
if (ftpClient.login(username, password)) {
return true;
}
}
ftpClient.disconnect();
return false;
} public boolean fileExist(String dict, String filename) {
String pattren = "\\.{1,}";
ftpdict = ftpdict + "/" + dict;
try {
FTPFile[] files = ftpClient.listFiles(ftpdict);
for (int i = 0; i < files.length; i++) {
if (files[i].getName().equalsIgnoreCase(filename)) {
flag = true;
}
if (files[i].isDirectory()
&& !files[i].getName().matches(pattren)) {
fileExist(files[i].getName(), filename);
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return flag;
} public void disconnect() throws IOException {
if (ftpClient.isConnected()) {
ftpClient.disconnect();
}
} public void run() {
System.out.println(getName() + " thread started!");
FTPUtil ftp = new FTPUtil();
try {
ftp.connect("127.0.0.1", 21, "admin", "admin");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
boolean b = ftp.fileExist(ftp.ftpdict, "3.txt");
System.err.println(b);
if (b) {
find = true;
}
try {
ftp.disconnect();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(getName() + " thread ended!");
} @SuppressWarnings("static-access")
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
int index = 0;
while (!find) {
new FTPUtil().start();
Thread.currentThread().sleep(timeslot);
if (index == 4) {
return;
}
index++;
}
}
}
我觉得应该有api是去刷新这个FTP Server的,暂时还没有摸索到,有知道的告知一声谢谢咯。
多线程查询FTP Server上的文件的更多相关文章
- Linux中ftp不能上传文件/目录的解决办法
在linux中不能上传文件或文件夹最多的问题就是权限问题,但有时也不一定是权限问题了,像我就是空间不够用了,下面我来总结一些ftp不能上传文件/目录的解决办法 在排除用户组和权限等问题后,最可能引 ...
- 打开FTP服务器上的文件夹时发生错误,请检查是否有权限访问该文件夹
打开FTP服务器上的文件夹时发生错误,请检查是否有权限访问 在win98,winme,win2000,win2003下都能正常上传文件夹,但在winxp+sp2下同样的文件夹就可能出现问题 1. 打开 ...
- FTP服务器上删除文件夹失败
很多人都知道:要删除FTP服务器上的文件夹时,必须确保文件夹下面没有其他文件,否则会删除失败! 可是,有些服务器考虑到安全等因素,通常会隐藏以点开始的文件名,例如“.test.txt”.于是,有的坏人 ...
- 浏览器通过http协议通过nginx访问ftp服务器上的文件
1.修改nginx配置文件 2.修改nginx默认目录为ftp默认目录 3.修改成自定义路径后,并修改此目录第一行,修改为root或是nginx用户 4.重新加载 cd /usr/local/ngin ...
- C# FileStream进行FTP服务上传文件和下载文件
定义FileStream类的操作类:操作类名: FtpUpDown 上传文件 /// <summary> /// 上传文件 /// </summary> /// <par ...
- “打开ftp服务器上的文件夹时发生错误,请检查是否有权限访问该文件夹"
阿里云虚拟主机上传网站程序 问题场景:网页制作完成后,程序需上传至虚拟主机 注意事项: 1.Windows系统的主机请将全部网页文件直接上传到FTP根目录,即 / . 2. 如果网页文件较多,上传较慢 ...
- JAVA通过FTP方式向远程服务器或者客户端上传、下载文件,以及删除FTP服务器上的文件
1.在目标服务器上搭建FTP服务器 搭建方式有多种大家可以自行选择,例如使用Serv-U或者FTPServer.exe:这里我以FTPServer.exe为例搭建:在目标服务器(这里对应的IP是10. ...
- Web浏览器导出FTP服务器上的文件
开发思路:1.代码登录ftp服务器下载文件到服务器2.通过web浏览器下载服务器上的文件 using System; using System.Collections; using System.Co ...
- 【FTP】C# System.Net.FtpClient库连接ftp服务器(上传文件)
如果自己单枪匹马写一个连接ftp服务器代码那是相当恐怖的(socket通信),有一个评价较高的dll库可以供我们使用. 那就是System.Net.FtpClient,链接地址:https://net ...
随机推荐
- Nginx负载均衡和反向代理设置
Nginx负载均衡: 格式: upstream 别名 { #别名一般要有意义,能看出是做什么的 server ip:端口; #要实现负载的服务器的ip.端口号} 例: upstream ...
- 关于mysql数据库在输入密码后,滴的一声直接退出界面的解决办法
转自:http://www.2cto.com/database/201412/361751.html 网上搜索到的解决办法: 1.找到mysql安装目录下的bin目录路径.2.打开cmd,进入到bin ...
- Scala第一章学习笔记
面向对象编程是一种自顶向下的程序设计方法.用面向对象方法构造软件时,我们将代码以名词(对象)做切割,每个对象有某种形式的表示服(self/this).行为(方法).和状态(成员变量).识别出名词并且定 ...
- GL_GL系列 - 总账系统基础(概念)
2014-07-07 Created By BaoXinjian
- SQL语句的Select部分只写必要的列
如果Select部分包含不需要的列,这会强制DB2必须进入数据页来得到所请求的特定列,这就要求更多的I/O操作.另外,如果再对这个不需要的列进行排序,就需要创建和传递一个更大的排序文件,相应地会使排序 ...
- Transact-SQL的除法问题
SELECT 3800/365, 3800.0/365; 执行上面的sql,得到的结果是:10, 10.410958 返回优先级较高的参数的数据类型. 有关详细信息,请参阅数据类型优先级 (Trans ...
- 关于Switch结构利用
三大流程结构,循环.分支.if ,循环与条件选择结构用的比较多,而swicth用的比较少,swicth可以用if代替,只不过麻烦,最终都能实现输入和输出的条件对应 Swicth利用 ...
- Xcode7--坑无法运行iOS9以下的模拟器
Unable to open liblaunch_sim.dylib. Try reinstalling Xcode or the simulator 解决办法 一.找到目标文件 /Applicati ...
- NSSet类型 以及与NSArray区别
NSSet到底什么类型,其实它和NSArray功能性质一样,用于存储对象,属于集合: NSSet , NSMutableSet类声明编程接口对象,无序的集合,在内存中存储方式是不连续的,不像NSAr ...
- $(document).ready() 与 window.onload的区别
1.执行时间 window.onload 必须等到页面内所有元素(包括图片 css js等)加载完毕后才会执行. $(document).ready() 是DOM结构绘制完毕后就执行,不必等到所有元素 ...