- 浏览: 87690 次
- 性别:
- 来自: 深圳
最新评论
-
Csf_java:
是不是少了什么东西?加载不了dll吗?Exception in ...
Java-Swing界面的摄像头\高拍仪抓图功能,有预览视频-使用xuggle。 -
zaizai13:
请问我的为什么总是报log4j:WARN No appende ...
Java-Swing界面的摄像头\高拍仪抓图功能,有预览视频-使用xuggle。 -
stjauns:
chairmanwang 写道楼主您好,我使用了您的程序,但是 ...
Java-Swing界面的摄像头\高拍仪抓图功能,有预览视频-使用xuggle。 -
chairmanwang:
楼主您好,我使用了您的程序,但是程序报错log4j:WARN ...
Java-Swing界面的摄像头\高拍仪抓图功能,有预览视频-使用xuggle。 -
stjauns:
daizhe 写道楼主好!感谢分享!我的系统是win7 64位 ...
Java-Swing界面的摄像头\高拍仪抓图功能,有预览视频-使用xuggle。
使用ftp4j-1.5,见http://www.sauronsoftware.it/projects/ftp4j/index.php。
界面如下:
1、登录到一个FTP服务器的特定文件夹,取回所有文件信息。
2、检索所有当前文件夹文件信息。
3、遍历所有远程服务器有的文件,若本地有此文件名的文件,则对比其大小。
4、下载所有远程服务器有而本地没有的文件和远程服务器文件大小与本地文件大小不同的文件。
功能简单,但足够使用了。
FTP实现代码:
进度监控代码:
源代码见附件。
界面如下:
1、登录到一个FTP服务器的特定文件夹,取回所有文件信息。
2、检索所有当前文件夹文件信息。
3、遍历所有远程服务器有的文件,若本地有此文件名的文件,则对比其大小。
4、下载所有远程服务器有而本地没有的文件和远程服务器文件大小与本地文件大小不同的文件。
功能简单,但足够使用了。
FTP实现代码:
package cn.stjauns.logan.updater; import it.sauronsoftware.ftp4j.FTPAbortedException; import it.sauronsoftware.ftp4j.FTPClient; import it.sauronsoftware.ftp4j.FTPDataTransferException; import it.sauronsoftware.ftp4j.FTPDataTransferListener; import it.sauronsoftware.ftp4j.FTPException; import it.sauronsoftware.ftp4j.FTPFile; import it.sauronsoftware.ftp4j.FTPIllegalReplyException; import it.sauronsoftware.ftp4j.FTPListParseException; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Properties; import org.apache.log4j.Logger; import cn.stjauns.logan.tools.CommonDlgUtil; import cn.stjauns.logan.tools.CommonPropertiesUtil; import cn.stjauns.logan.tools.CommonStringDateUtil; public class Updater { private FTPClient client = new FTPClient(); protected Monitor monitor = new Monitor(); public void doTest() { logger.info(getLocalfiles()); } /** * 更新 * * @throws FTPException * @throws FTPIllegalReplyException * @throws IOException * @throws IllegalStateException * @throws FTPListParseException * @throws FTPAbortedException * @throws FTPDataTransferException */ public boolean doUpdate() throws IllegalStateException, IOException, FTPIllegalReplyException, FTPException, FTPDataTransferException, FTPAbortedException, FTPListParseException { monitor.setVisible(true); if (!connectToServer()) { return false; } // 取远程文件信息 monitor.setText("取远程文件信息" + "..."); Map<String, FileObject> remotefiles = getRemotefiles(); if (remotefiles.size() == 0) { CommonDlgUtil.warning("警告", "更新服务器上没有文件!", monitor); return true; } // 取本地文件信息 monitor.setText("取本地文件信息" + "..."); Map<String, FileObject> localfiles = getLocalfiles(); // 按远程文件信息对比本地文件信息\ monitor.setText("对比文件信息" + "..."); Iterator it = remotefiles.keySet().iterator(); while (it.hasNext()) { String key = (String) it.next(); if (localfiles.containsKey(key)) { logger.info("compare file :" + remotefiles.get(key) + ":" + localfiles.get(key)); if (localfiles.get(key).size == remotefiles.get(key).size) { // 存在本地文件且大小相同,从远程文件集中删除 logger.info("remove remote file: " + remotefiles.get(key)); it.remove(); remotefiles.remove(key); } } } // 下载更新的文件 doDownload(remotefiles); monitor.setText("退出登录" + "..."); client.disconnect(true); return true; } /** * 按更新的远程文件集下载文件到当前目录覆盖同名文件 * * @param remotefiles * @throws FTPAbortedException * @throws FTPDataTransferException * @throws FTPException * @throws FTPIllegalReplyException * @throws IOException * @throws FileNotFoundException * @throws IllegalStateException */ private void doDownload(Map<String, FileObject> remotefiles) throws IllegalStateException, FileNotFoundException, IOException, FTPIllegalReplyException, FTPException, FTPDataTransferException, FTPAbortedException { for (String key : remotefiles.keySet()) { monitor.total += remotefiles.get(key).size; } monitor.getJpg1().setMaximum(monitor.total); monitor.setText("开始下载文件" + "..."); int i = 1; for (String filename : remotefiles.keySet()) { monitor.getJpg1().setString("下载文件:第" + i + "个/共" + remotefiles.size() + "个"); listener.setFile(remotefiles.get(filename)); client.download(filename, new File(System.getProperty("user.dir") + "/" + filename), listener); i++; } } private TransferMonitor listener = new TransferMonitor(monitor); private Logger logger = Logger.getLogger(Updater.class); /** * 取本地文件夹的所有文件信息 * * @return */ private Map<String, FileObject> getLocalfiles() { File f = new File(System.getProperty("user.dir")); Map<String, FileObject> rtn = new HashMap<String, FileObject>(); if (f.isDirectory()) { for (File file : f.listFiles()) { FileObject fo = new FileObject(); fo.filename = file.getName(); fo.lasttime = CommonStringDateUtil.format(new Date(file.lastModified())); fo.size = file.length(); rtn.put(fo.filename, fo); logger.info("add local file: " + fo); } } return rtn; } /** * 连接且登录到特定的FTP文件夹 * * @return * @throws FTPException * @throws FTPIllegalReplyException * @throws IOException * @throws IllegalStateException */ private boolean connectToServer() throws IllegalStateException, IOException, FTPIllegalReplyException, FTPException { Properties prop = CommonPropertiesUtil.parseProp("/para.properties"); String url = prop.getProperty("ftpserver", "127.0.0.1"); monitor.setText("连接到系统升级服务器:" + url + "..."); client.connect(url); String ftpuser = "user"; String ftppwd = "pwd"; monitor.setText("登录中" + "..."); client.login(ftpuser, ftppwd); String path = prop.getProperty("path", "transms3jars"); monitor.setText("查找目录:" + path + "..."); client.changeDirectory(path); if (client.isCompressionSupported()) { logger.info("Compress = TRUE"); client.setCompressionEnabled(true); } return true; } /** * 取服务器文件 * * @return * @throws FTPListParseException * @throws FTPAbortedException * @throws FTPDataTransferException * @throws FTPException * @throws FTPIllegalReplyException * @throws IOException * @throws IllegalStateException */ private Map<String, FileObject> getRemotefiles() throws IllegalStateException, IOException, FTPIllegalReplyException, FTPException, FTPDataTransferException, FTPAbortedException, FTPListParseException { FTPFile[] files = client.list(); Map<String, FileObject> rtn = new HashMap<String, FileObject>(); for (FTPFile file : files) { if (".".equals(file.getName()) || "..".equals(file.getName())) { continue; } FileObject o = new FileObject(); o.filename = file.getName(); o.lasttime = CommonStringDateUtil.format(file.getModifiedDate()); o.size = file.getSize(); rtn.put(o.filename, o); logger.info("add remote file: " + o); } return rtn; } } class FileObject { String filename; String lasttime; long size; @Override public String toString() { return filename + "|" + lasttime + "|" + size; } } class TransferMonitor implements FTPDataTransferListener { private Monitor monitor = null; private FileObject fo = null; private Logger logger = Logger.getLogger(Updater.class); private int size = 0; public void setFile(FileObject f) { logger.info("TransferMonitor set file :" + f); fo = f; size = 0; monitor.getJpg2().setMaximum(((Long) fo.size).intValue()); monitor.getJpg2().setValue(0); monitor.getJpg2().setString("下载中:" + fo.filename); } @Override public void aborted() { logger.info(fo + " aborted"); } @Override public void completed() { logger.info(fo + " completed"); } @Override public void failed() { logger.info(fo + " failed"); } @Override public void started() { logger.info(fo + " started"); } @Override public void transferred(int arg0) { monitor.getJpg2().setValue(size += arg0); monitor.getJpg1().setValue(monitor.current += arg0); } public TransferMonitor(Monitor monitor) { super(); this.monitor = monitor; } }
进度监控代码:
package cn.stjauns.logan.updater; import javax.swing.JPanel; import javax.swing.WindowConstants; import java.awt.GridLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JProgressBar; import javax.swing.SwingConstants; import java.awt.Color; public class Monitor extends JFrame { private static final long serialVersionUID = 1L; public int total = 0; public int current = 0; private JPanel jContentPane = null; private JLabel jlb = null; private JProgressBar jpg1 = null; private JProgressBar jpg2 = null; /** * @param owner */ public Monitor() { initialize(); } public void setText(String text) { jlb.setText(text); } /** * This method initializes this * * @return void */ private void initialize() { this.setSize(300, 200); this.setResizable(false); this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); this.setTitle("Transms3 AutoUpdater Version 0.1"); this.setContentPane(getJContentPane()); this.setLocationRelativeTo(null); this.setAlwaysOnTop(true); } /** * This method initializes jContentPane * * @return javax.swing.JPanel */ private JPanel getJContentPane() { if (jContentPane == null) { jlb = new JLabel(); jlb.setHorizontalAlignment(SwingConstants.CENTER); jlb.setForeground(Color.blue); jlb.setHorizontalTextPosition(SwingConstants.CENTER); GridLayout gridLayout = new GridLayout(); gridLayout.setRows(3); jContentPane = new JPanel(); jContentPane.setLayout(gridLayout); jContentPane.add(jlb, null); jContentPane.add(getJpg1(), null); jContentPane.add(getJpg2(), null); } return jContentPane; } /** * This method initializes jpg1 * * @return javax.swing.JProgressBar */ protected JProgressBar getJpg1() { if (jpg1 == null) { jpg1 = new JProgressBar(); jpg1.setStringPainted(true); jpg1.setString("总更新文件进度"); } return jpg1; } /** * This method initializes jpg2 * * @return javax.swing.JProgressBar */ protected JProgressBar getJpg2() { if (jpg2 == null) { jpg2 = new JProgressBar(); jpg2.setStringPainted(true); jpg2.setString("当前更新文件进度"); } return jpg2; } }
源代码见附件。
发表评论
-
双击一个jar文件打开另一个jar文件中的main方法
2022-12-01 14:08 170做一个仅有META-INF的jar文件,其下MANIFEST. ... -
JSP网站从Tomcat7升级到Tomcat9抛出错误Unable to compile class for JSP] with root cause
2020-03-05 13:10 781一个历史遗留的JSP网站,部署在Tomcat7上,一切正常 现 ... -
解决JTextPane设定其Background颜色无法导出正确的HTML的问题
2018-06-26 18:09 1237设定foreground代码如下: SimpleAttribu ... -
java和mysql的week周次对应方法
2018-04-13 13:43 1055MYSQL方法: select dt,if(month(dt) ... -
使用WindowBuilder来代替VisualEditor
2016-07-02 10:54 1@wbp.factory 标记static方法为Compone ... -
Eclipse Mars.2 refactory rename提示大量syntax error,编译器却无error仅warning
2016-07-01 12:26 693折腾半天,发现还是'_'作为包名和变量名的问题 最终把所有的' ... -
java8中的getTimeZone表现与java7中不同
2015-01-13 17:44 999原来的代码中使用TimeZone.setDefault(Tim ... -
Java-Swing界面的摄像头\高拍仪抓图功能,有预览视频-使用xuggle。
2013-05-27 15:56 8706需求:要直接使用SWING来抓高拍仪的图,亦即支持摄像头。 曾 ... -
Eclipse+Subclipse插件,设定一个文件取消其版本控制,添加到svn:ignor。
2013-03-14 23:15 4943原始帖子见: http://www.oschina.net/q ... -
tomcat:A docBase *** inside the host appBase has been specified...问题及解决
2013-01-15 18:33 13339eclipse galileo升级到indigo,发布项目到t ... -
ftp4j连接Microsoft FTP Service 7.5的list错误it.sauronsoftware.ftp4j.FTPListParse问题及解决
2012-11-12 18:28 3280源代码参见前几篇的附件。 FTP服务器准备从cuteFTP换 ... -
深圳地铁线路大图-PNG格式
2011-06-25 12:04 1894上网找一圈,只有老图,在官方网站上也没有能下载的图片格式,于是 ... -
从MYSQL的binlog恢复指定的SQL语句,解决中文乱码问题。
2011-04-09 21:24 3343系统错误导致3天中的部分数据被错误覆盖,只能从MYSQL的bi ... -
eclipst+tomcat 发布多个互相依赖的project问题
2010-10-28 16:32 1537若一个Dynamic Web project的java bui ... -
OY!原来是JAVA的BUG呀~~~在SwingWorker中嵌套调用SwingWorker的死锁问题解决方法。
2010-05-08 14:18 1210java6update18开始,在一个SwingWorker的 ... -
20100426,放弃EJB,转向轻量级的Hessian
2010-04-28 15:25 1721公司系统的远程调用层从EJB2.1转换为Hessian了,现正 ... -
设定窗口的默认按钮按键:ESC和ENTER等按键
2010-03-03 17:44 1530在Google上查到的代码见下面的链接 http://www. ... -
JSplitPane用代码调用OneTouchExpand/Collapse
2009-10-26 15:49 1021直接设定: getJsp1().setDividerLocat ... -
AutoCodeGenTool自动生成重复代码
2009-10-24 23:44 1090公司系统用tikeswing做表现层,配置布局的时候有很多重复 ... -
WeekselectPanel选择一年中的某周
2009-10-24 23:20 1132系统要增加工作计划功能,让每个营业部每周末分派下周本部门每个人 ...
相关推荐
使用Swing的FTP上传下载程序,运行时需要下载一个Server u服务器。
远程ftp服务器会更新某目录下的一些文件,本地服务器需要定时下载这些更新后的文件 由最后修改时间判断该文件是不是最新的,然后下载更新的文件,这样可避免重复下载。 有jar包,有实例,完整可运行实例
java大文件上传至ftp服务器带进度条显示的,进度条的显示和ftp的上传速度同步,解决了进度条显示和ftp不同步的问题
使用Java写的完整的上传下载Ftp上的文件案例。 请大家参考。 作者:宋海康
这是我使用java实现的linux和ftp服务器文件上传下载工具,需要电脑安装jdk8, 启动命令,java -jar linuxAndFtp.jar 启动成功后,浏览器访问:http://localhost:9999 服务器的账号密码通过服务器列表页面管理,添加的...
对FTP服务器文件的基本操做:上传下载递归目录遍历等。
java 从ftp服务器下载文件!方便快捷,哈哈!
用java语言编写的ftp小工具,可以按指定时间监控ftp服务器,把服务器指定目录内新产生的文件或者文件夹下载到本地指定文件夹,下载后删除数据。 也可以监控本地文件夹,把文件夹内新产生的文件或者文件夹整体上传到...
Java 实现对比ftp文件和本地文件的修改时间 ftp服务器文件比本地文件新时 把服务器文件下载覆盖本地文件 更新本地文件
FtpList部分是用来显示FTP服务器上的文件; GetButton部分为从FTP服务器下传一个文件; PutButton部分为向FTP服务器上传一个文件。 别忘了在程序中还要引入两个库文件(import sun.net.*,import sun.net.ftp.*)。 以下...
java FTP上传文件(进度条显示进度)
可能需要定时的自动去检测服务器是否存在所需要的文件,如果有就自动通过ftp下载,以上为java实现代码
java上传文件到ftp服务器,从ftp服务器下载东西demo,日管理
Java 程序实现的 FTP 跨服务器文件上传下载功能。
java实现连接登录Ftp,下载Ftp指定文件夹下的所有文件,并解压所有压缩文件,同时支持对指定文件夹进行文件压缩
JAVA中生成xml文件到指定路径和上传到ftp服务器到指定路径的方法。
JAVA获取FTP文件列表,功能齐全。包括:链接到服务器,上传文件到FTP服务器,从FTP服务器上下载文件并返回下载文件长度,返回FTP目录下的文件列表,删除FTP上的文件及目录,关闭链接。
下载后配置好自己FTP服务器ip,端口号(默认21),用户名,密码和服务器根目录,下载到本地的位置即可,好使!
JAVA遍历下载FTPS服务器上的文件,
该项目是简单介绍程序调用FTP上传和下载文件到服务器的方法。