情形是这样的,最近做一个自动化的项目,当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上的文件的更多相关文章

  1. Linux中ftp不能上传文件/目录的解决办法

    在linux中不能上传文件或文件夹最多的问题就是权限问题,但有时也不一定是权限问题了,像我就是空间不够用了,下面我来总结一些ftp不能上传文件/目录的解决办法   在排除用户组和权限等问题后,最可能引 ...

  2. 打开FTP服务器上的文件夹时发生错误,请检查是否有权限访问该文件夹

    打开FTP服务器上的文件夹时发生错误,请检查是否有权限访问 在win98,winme,win2000,win2003下都能正常上传文件夹,但在winxp+sp2下同样的文件夹就可能出现问题 1. 打开 ...

  3. FTP服务器上删除文件夹失败

    很多人都知道:要删除FTP服务器上的文件夹时,必须确保文件夹下面没有其他文件,否则会删除失败! 可是,有些服务器考虑到安全等因素,通常会隐藏以点开始的文件名,例如“.test.txt”.于是,有的坏人 ...

  4. 浏览器通过http协议通过nginx访问ftp服务器上的文件

    1.修改nginx配置文件 2.修改nginx默认目录为ftp默认目录 3.修改成自定义路径后,并修改此目录第一行,修改为root或是nginx用户 4.重新加载 cd /usr/local/ngin ...

  5. C# FileStream进行FTP服务上传文件和下载文件

    定义FileStream类的操作类:操作类名: FtpUpDown 上传文件 /// <summary> /// 上传文件 /// </summary> /// <par ...

  6. “打开ftp服务器上的文件夹时发生错误,请检查是否有权限访问该文件夹"

    阿里云虚拟主机上传网站程序 问题场景:网页制作完成后,程序需上传至虚拟主机 注意事项: 1.Windows系统的主机请将全部网页文件直接上传到FTP根目录,即 / . 2. 如果网页文件较多,上传较慢 ...

  7. JAVA通过FTP方式向远程服务器或者客户端上传、下载文件,以及删除FTP服务器上的文件

    1.在目标服务器上搭建FTP服务器 搭建方式有多种大家可以自行选择,例如使用Serv-U或者FTPServer.exe:这里我以FTPServer.exe为例搭建:在目标服务器(这里对应的IP是10. ...

  8. Web浏览器导出FTP服务器上的文件

    开发思路:1.代码登录ftp服务器下载文件到服务器2.通过web浏览器下载服务器上的文件 using System; using System.Collections; using System.Co ...

  9. 【FTP】C# System.Net.FtpClient库连接ftp服务器(上传文件)

    如果自己单枪匹马写一个连接ftp服务器代码那是相当恐怖的(socket通信),有一个评价较高的dll库可以供我们使用. 那就是System.Net.FtpClient,链接地址:https://net ...

随机推荐

  1. bzoj3036: 绿豆蛙的归宿

    Description 随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 给出一个有向无环的连通图,起点为1终点为N,每条边都有一个长度.绿豆蛙从起点出发,走向终点.到达每 ...

  2. android学习笔记17——对话框(PopupWindow)

    PopupWindow ==> PopupWindow可创建类似对话框的窗口,使用其创建对话框窗口的操作步骤: 1.调用PopupWindow构造器构造PopupWindow对象: 2.调用Po ...

  3. beego里面自定义配置文件

    beego编译好的exe通过全路径调用会crash,看了半天,发现是解析不到配置文件,研究了下 发现beego自定义配置文件以后,需要手工parse,我表示,以为是自动化的,没想到是半自动化的…… 追 ...

  4. golang的推荐的orm库

    https://github.com/jinzhu/gorm

  5. Makefile所有内嵌函数

    一.文本处理函数以下是GNU make内嵌的文本(字符串)处理函数.1       $(subst FROM,TO,TEXT) 函数名称:字符串替换函数—subst. 函数功能:把字串“TEXT”中的 ...

  6. Env:autojump安装使用

    注:这里只介绍我使用的方式,当然不是唯一方式 作用:autojump可以快速进行路径导航,具备记忆历史路径:不仅仅是可以进入当前路径下的某个路径,也可以是其他历史路径 1. 下载 首先,$ git c ...

  7. ulipad 常用快捷键

    快捷键名称 对应功能 F1 (M)UliPad Help Document(帮助文档) F2 (M)Directory Browser(目录浏览)(3.1版新增) F3 (M)Find Next(查找 ...

  8. python实现字体闪图

    !/usr/bin/env python from future import print_function import os.path import sys from optparse impor ...

  9. C语言基础学习

    汇编语言又叫符号语言 出来机器语言和汇编语言外其他语言必须经过翻译(编译,和解释行)才可以执行 .c --> 编译(翻译成二进制代码 .obj) 链接 把目标程序和库函数以及其他目标程序链接起来 ...

  10. [实变函数]5.6 Lebesgue 积分的几何意义 $\bullet$ Fubini 定理

    1 本节推广数学分析中的 Fubini 定理. 为此, 先引入 (1)(从低到高) 对 $A\subset \bbR^p, B\subset\bbR^q$, $$\bex A\times B=\sed ...