当前位置: 首页 > news >正文

免费淘宝网站建设襄阳市住房和城乡建设局官方网站

免费淘宝网站建设,襄阳市住房和城乡建设局官方网站,优秀办公空间设计案例ppt,电商小程序怎么做背景#xff1a; 1、文件数据在A服务器#xff08;windows#xff09;#xff08;不定期在指定目录下生成#xff09;#xff0c;项目应用部署在B服务器#xff08;Linux#xff09;#xff1b; 2、项目应用在B服务器#xff0c;监听A服务器指定目录#xff0c;有新…背景 1、文件数据在A服务器windows不定期在指定目录下生成项目应用部署在B服务器Linux 2、项目应用在B服务器监听A服务器指定目录有新生成文件进行读取文件信息持久化数据 3、提供两块内容第一安装windows FTP服务第二项目源码希望可以帮助到你。 共计4种方案试错采用了第三种方案第四种方案没有试。 1、使用jcsh.jar提供方法读取文件信息但需要A服务器开通SSH远程连接一般linux服务器都是默认开通的可直接读取连接读取windows系统需安装SSH因现场环境A服务器是windows2003故放弃这种方法。 2、曲线救国通过脚本脚本监听比较困难故放弃把A服务器信息定时存入B服务器Linux再通过jcsh.jar读取文件信息。 3、通过A服务器安装FTP服务B服务器安装FTP客户端使用java动态监听该目录下生成文件读取信息。 4、把A服务器指定目录进行共享等同于共享的这个目录就是B服务的目录了再进行读取因第三种方案成功故没有尝试第四种方案。 windows安装FTP服务 1、开启ftp服务控制面板–程序和功能–启用或关闭windows功能–标红框全部打开–点击确定 2、新建站点 控制面板–大图标–管理工具 IIS管理器 网站–添加FTP站点 以上就是windows安装FTP服务的过程我这演示了匿名创建站点谁都可以访问还可以新建用户需要用户登录才能访问。 源码 引入该依赖 dependencygroupIdcommons-net/groupIdartifactIdcommons-net/artifactIdversion3.6/version /dependencyFileChangeData Data public class FileChangeData {/*** 文件信息* */private FTPFile ftpFile;/*** 文件改变类型* */private FileChangeType eventType;/*** 文件名称* */private String fileName;/*** 文件大小* */private Long fileSize;/*** FTPClient* */private FTPClient ftpClient;/*** 获取文件输入流* return InputStream* */public InputStream getInputStream(String filePathName) {//如果是删除事件则不能够获取流if (Objects.equals(eventType, FileChangeType.FILE_DELETED)) {return null;}try {return ftpClient.retrieveFileStream(filePathName);} catch (IOException e) {return null;}} }FileChangeEvent public interface FileChangeEvent {/*** 文件发生改变时触发此方法* param fileChangeData 文件发生了改变* */Functionvoid change(FileChangeData fileChangeData) throws IOException; }FTPService public interface FTPService {/*** ftp登陆* return boolean 是否登陆成功* */FTPClient login();/*** ftp登出* return boolean 是否登出成功* */boolean loginOut();/*** 获取文件列表* return FTPFile[] 文件列表* */FTPFile[] listFile();/*** 监听文件夹的改变* param fileChangeEvent 文件改变事件* */void addListenerFileChange(FileChangeEvent fileChangeEvent); }ListenerChangeRunnable public interface ListenerChangeRunnable extends Runnable {/*** 停止监听文件* return boolean 是否停止成功* */boolean stopListener(); }FTPServiceImpl Service public class FTPServiceImpl implements FTPService {Autowiredprivate FTPConfig ftpConfig;private String SPLIT :;private ThreadLocalFTPClient currentFTPClient;private ThreadLocalListenerChangeRunnable currentListener;public FTPServiceImpl() {this.currentFTPClient new ThreadLocal();this.currentListener new ThreadLocal();}Overridepublic FTPClient login() {FTPClient ftpClient new FTPClient();try {ftpClient.connect(ftpConfig.getFtpIp(), ftpConfig.getFtpPort());ftpClient.login(ftpConfig.getUsername(), ftpConfig.getPassword()); // ftpClient.setControlEncoding(gb2312);this.currentFTPClient.set(ftpClient);return ftpClient;} catch (Exception e) {return null;}}Overridepublic boolean loginOut() {try {currentFTPClient.get().logout();currentFTPClient.get().disconnect();return Boolean.TRUE;} catch (Exception e) {return Boolean.FALSE;}}Overridepublic FTPFile[] listFile() {FTPClient ftpClient this.currentFTPClient.get();try {return ftpClient.listFiles();} catch (Exception e) {return null;}}Overridepublic void addListenerFileChange(FileChangeEvent fileChangeEvent) {FTPClient ftpClient this.currentFTPClient.get();ListenerFileChangeThreadRunnable listenerFileChangeThread new ListenerFileChangeThreadRunnable(ftpClient, fileChangeEvent);this.currentListener.set(listenerFileChangeThread);new Thread(listenerFileChangeThread).start();} }ListenerFileChangeThreadRunnable Slf4j public class ListenerFileChangeThreadRunnable implements ListenerChangeRunnable {private final FTPClient ftpClient;private volatile boolean stop;private final MapString, Long fileMemory;private final FileChangeEvent fileChangeEvent;public ListenerFileChangeThreadRunnable(FTPClient ftpClient, FileChangeEvent fileChangeEvent) {this.ftpClient ftpClient;this.fileChangeEvent fileChangeEvent;this.fileMemory new HashMap();}Overridepublic void run() {while (!stop) {try {FTPFile[] ftpFiles ftpClient.listFiles();//判断文件被删除if (fileMemory.size() 0) {SetString fileNames new HashSet();for (FTPFile ftpFile : ftpFiles) {if (ftpFile.isDirectory()) {log.info(文件夹不做删除判断);continue;}fileNames.add(ftpFile.getName());}SetMap.EntryString, Long entries fileMemory.entrySet();for (Map.EntryString, Long map : entries) {if (!fileNames.contains(map.getKey())) {log.info(文件{}被删除了, map.getKey());FileChangeData fileChangeData new FileChangeData();fileChangeData.setEventType(FileChangeType.FILE_DELETED);fileChangeData.setFileName(map.getKey());fileChangeData.setFileSize(map.getValue());fileMemory.remove(map.getKey());entries.remove(map.getKey());fileChangeEvent.change(fileChangeData);}}}//判断文件是否有更改或新增for (FTPFile ftpFile: ftpFiles) {//判断是否为文件夹if (ftpFile.isDirectory()) { // log.info({}为文件不进行监听操作, ftpFile.getName());continue;}FileChangeData fileChangeData new FileChangeData();fileChangeData.setFileName(ftpFile.getName()); // fileChangeData.setFileName(D:\\ftptest\\aaa\\ftpFile.getName());fileChangeData.setFileSize(ftpFile.getSize());fileChangeData.setFtpFile(ftpFile);//文件是否存在于缓存文件列表中if (fileMemory.containsKey(ftpFile.getName())) { // log.info(文件{}在内存中已经存在进行大小判断, ftpFile.getName());if (!Objects.equals(fileMemory.get(ftpFile.getName()), ftpFile.getSize())) { // log.info(文件{}在内存中已经存在且大小不一致进行更新缓存操作, ftpFile.getName());fileMemory.put(ftpFile.getName(), ftpFile.getSize());fileChangeData.setEventType(FileChangeType.FILE_UPDATE);fileChangeEvent.change(fileChangeData);}continue;} // log.info(文件{}在内存中不存在进行缓存操作, ftpFile.getName());fileMemory.put(ftpFile.getName(), ftpFile.getSize());fileChangeData.setEventType(FileChangeType.FILE_ADD);fileChangeEvent.change(fileChangeData);}} catch (Exception e) {continue;//throw new RuntimeException(e);}try {TimeUnit.SECONDS.sleep(20);} catch (InterruptedException e) {continue;//throw new RuntimeException(e);}}}Overridepublic boolean stopListener() {this.stop Boolean.TRUE;this.fileMemory.clear();return this.stop;} }FileChangeType public enum FileChangeType {FILE_UPDATE(0, 文件更新),FILE_ADD(1, 文件添加),FILE_DELETED(2, 文件删除);Getterprivate Integer type;Getterprivate String desc;FileChangeType(Integer type, String desc) {this.type type;this.desc desc;} }FTPConfig Data Configuration public class FTPConfig {Value(${ftp.ip:ftp的ip})private String ftpIp;Value(${ftp.port:ftp端口默认21})private Integer ftpPort;Value(${ftp.username:ftp创建的用户名})private String username;Value(${ftp.password:ftp创建的用户名密码})private String password; }SendEmailApplicationTests Component class SendEmailApplicationTests implements ApplicationRunner {Autowiredprivate FTPService ftpService;void ftpTest() {FTPClient ftpClient ftpService.login();ftpService.addListenerFileChange(ftpFile - {System.out.println(String.format(文件%s被改变了文件改变类型%s, ftpFile.getFileName(), ftpFile.getEventType().getDesc()));InputStream inputStream ftpClient.retrieveFileStream(/ ftpFile.getFileName());if(inputStream!null){BufferedReader reader new BufferedReader(new InputStreamReader(inputStream,GBK));String s null;ListString listStr new ArrayList();//读取的数据在listStrwhile ((s reader.readLine()) ! null) {System.out.println( s);listStr.add(s);}//处理业务逻辑inputStream.close();reader.close();ftpClient.completePendingCommand();}});}Overridepublic void run(ApplicationArguments args) throws Exception {ftpTest();} }
http://wiki.neutronadmin.com/news/209493/

相关文章:

  • 老渔哥网站建设公司wordpress客户端linux
  • 淘宝客建立网站推广怎么做俄语网站模板
  • 网站用什么技术做的简单的手机网站模板下载安装
  • 外贸平台网站手机网站系统
  • 江苏省建设档案网站做网站来联盟怎么样
  • 做网站要什么资料建设银行信用卡在网站激活后如何设置密码
  • 如何判断网站做的关键词天津企朋做网站的公司
  • 做数据的网站有哪些内容给wordpress插件添加po文件
  • 不用代码做网站html湖南营销型网站建设
  • 咸阳做网站的公司电话WordPress用AFC制作主题
  • 企业网站服务网站建设代理多少钱
  • 致力于做服务更好的网站建设公司什么网站允许搭建
  • 厦门网站建设方案策划建设网站企业网上银行登录官方
  • 网络销售的工作内容热狗seo外包
  • 营销展示型网站模板c2c网站建设需求分析
  • 个人网站下载推广计划和推广单元什么区别
  • wordpress的教程智推seo
  • 河南省建设教育协会网站程序源代码下载网站
  • 网站开发 印花税网站建设工作汇报
  • 新开发网站松江建网站
  • 国际公司湛江seo推广外包
  • 免费网站建设哪家好浙江网站建设 seo
  • 沧州市网站建设公司wordpress如何看网页地址
  • 高碑店网站建设价格万网归一
  • 长沙市网站开发北京网络开发公司
  • 新华网站建设网站标题和关键词一样
  • 网站的基本建设投资泰州seo外包公司
  • 网站建设托管合同公司网站建设一条龙
  • 绿色环保企业网站模板英特尔网站开发框架
  • 什么样建网站网页分析从哪些方面