- 浏览: 90487 次
- 性别:
- 来自: 深圳
最新评论
-
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 239做一个仅有META-INF的jar文件,其下MANIFEST. ... -
JSP网站从Tomcat7升级到Tomcat9抛出错误Unable to compile class for JSP] with root cause
2020-03-05 13:10 970一个历史遗留的JSP网站,部署在Tomcat7上,一切正常 现 ... -
解决JTextPane设定其Background颜色无法导出正确的HTML的问题
2018-06-26 18:09 1317设定foreground代码如下: SimpleAttribu ... -
java和mysql的week周次对应方法
2018-04-13 13:43 1102MYSQL方法: 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 729折腾半天,发现还是'_'作为包名和变量名的问题 最终把所有的' ... -
java8中的getTimeZone表现与java7中不同
2015-01-13 17:44 1041原来的代码中使用TimeZone.setDefault(Tim ... -
Java-Swing界面的摄像头\高拍仪抓图功能,有预览视频-使用xuggle。
2013-05-27 15:56 8868需求:要直接使用SWING来抓高拍仪的图,亦即支持摄像头。 曾 ... -
Eclipse+Subclipse插件,设定一个文件取消其版本控制,添加到svn:ignor。
2013-03-14 23:15 4975原始帖子见: http://www.oschina.net/q ... -
tomcat:A docBase *** inside the host appBase has been specified...问题及解决
2013-01-15 18:33 13431eclipse galileo升级到indigo,发布项目到t ... -
ftp4j连接Microsoft FTP Service 7.5的list错误it.sauronsoftware.ftp4j.FTPListParse问题及解决
2012-11-12 18:28 3344源代码参见前几篇的附件。 FTP服务器准备从cuteFTP换 ... -
深圳地铁线路大图-PNG格式
2011-06-25 12:04 1952上网找一圈,只有老图,在官方网站上也没有能下载的图片格式,于是 ... -
从MYSQL的binlog恢复指定的SQL语句,解决中文乱码问题。
2011-04-09 21:24 3430系统错误导致3天中的部分数据被错误覆盖,只能从MYSQL的bi ... -
eclipst+tomcat 发布多个互相依赖的project问题
2010-10-28 16:32 1600若一个Dynamic Web project的java bui ... -
OY!原来是JAVA的BUG呀~~~在SwingWorker中嵌套调用SwingWorker的死锁问题解决方法。
2010-05-08 14:18 1240java6update18开始,在一个SwingWorker的 ... -
20100426,放弃EJB,转向轻量级的Hessian
2010-04-28 15:25 1761公司系统的远程调用层从EJB2.1转换为Hessian了,现正 ... -
设定窗口的默认按钮按键:ESC和ENTER等按键
2010-03-03 17:44 1572在Google上查到的代码见下面的链接 http://www. ... -
JSplitPane用代码调用OneTouchExpand/Collapse
2009-10-26 15:49 1059直接设定: getJsp1().setDividerLocat ... -
AutoCodeGenTool自动生成重复代码
2009-10-24 23:44 1136公司系统用tikeswing做表现层,配置布局的时候有很多重复 ... -
WeekselectPanel选择一年中的某周
2009-10-24 23:20 1192系统要增加工作计划功能,让每个营业部每周末分派下周本部门每个人 ...
相关推荐
在这个项目中,Swing被用来构建用户界面,提供按钮、文本框等元素,让用户可以交互地输入FTP服务器的连接信息以及选择本地文件进行上传或下载。 FTP协议是一种用于网络上文件传输的标准协议,它允许用户在两台...
总的来说,实现Java大文件上传至FTP服务器并显示同步进度条涉及的关键技术点包括:FTPClient的使用、文件的分块上传、多线程同步、GUI组件的更新以及异常处理。通过合理设计和优化,可以实现高效且用户体验良好的大...
下面将详细讲解如何使用Java的Swing库创建一个带有进度条的FTP文件上传功能。 首先,我们需要理解FTP的基本原理。FTP是一种用于在Internet上进行文件传输的标准协议。Java提供了一个内置的`java.net.FTPClient`类,...
这个项目的核心是利用Java的FTP库来与FTP服务器进行通信,Swing则提供了友好的用户交互界面。在本项目中,用户可以通过简单的操作在本地计算机和FTP服务器之间进行文件管理。 首先,我们要理解FTP(File Transfer ...
本项目是利用Java实现一个FTP自动上传文件的功能,特别关注的是将整个磁盘的所有文件及其子目录上传到FTP服务器。这个功能对于自动化运维、数据备份或者文件共享等场景非常实用。 首先,要实现FTP自动上传,我们...
总的来说,这个Java Swing 文件批量上传DEMO涵盖了Java GUI编程、文件I/O、网络编程、多线程以及用户交互等多个方面,对于初学者来说,是一个很好的实践项目,可以帮助他们深入理解Java Swing的应用及文件上传的实现...
这涉及到建立与FTP服务器的连接,登录,改变工作目录,列出目录内容,以及执行PUT(上传)和GET(下载)命令。在这个项目中,可能还实现了监控上传和下载速度的功能,这可能通过计算传输的字节数和时间来实现。 **5...
【Java Swing FTP客户端程序】是一种基于Java编程语言的图形用户界面(GUI)工具,用于实现文件传输协议(FTP)。在本文中,我们将深入探讨如何利用Java Swing构建一个FTP客户端,以及涉及的关键技术和概念。 首先...
此外,GUI也需要实时更新以反映下载进度,这可以通过使用Swing的事件驱动模型和模型-视图-控制器(MVC)设计模式来实现。 在实际编码中,可能会用到以下Java类和接口: 1. `javax.swing.JFrame`:作为主窗口。 2. `...
Java图形自动更新程序是利用Java Swing库来构建的用户界面,结合Socket通信技术,实现软件的后台自动更新功能。在现代软件开发中,保持应用程序的最新状态至关重要,以确保用户可以享受到最新的特性和安全修复。Java...
FTP(File Transfer Protocol)下载是网络上常见的文件传输方式,特别是在服务器管理和文件共享场景中。在实际应用中,为了提供更好的用户体验,我们通常会添加进度条功能,让用户能够直观地了解下载进度,同时配合...
在Java中实现文件上传,首先需要建立FTP连接,然后登录到FTP服务器。接着,可以使用`FTPClient`的`storeFile()`方法将本地文件上传到服务器。下载文件则使用`retrieveFile()`方法。 4. **断点续传**: 断点续传...
它允许用户从远程服务器上下载文件,或者将本地文件上传到服务器。在Java中,我们可以使用`java.net`包中的`Socket`和`DataInputStream`/`DataOutputStream`类来实现基本的FTP通信,但为了更方便地处理FTP操作,通常...
在IT行业中,网络下载是日常开发中不可或缺的一...综上所述,"Http下载器 FTP下载器(java)"项目涵盖了网络协议、文件I/O、多线程、异常处理等多个Java核心知识点,对于学习和实践网络编程及文件下载具有很高的价值。
在本项目中,Swing被用来创建FTP客户端的界面,包括按钮、文本框等组件,用户可以通过这些组件来输入FTP服务器信息、选择文件进行上传或下载。 3. **edtftpj.jar**:`edtftpj.jar`可能是一个第三方FTP库,它提供了...
java写的ftp客户端源码,很久之前了,用的是apache的net包里面的ftp功能,然后自己做了一些swing的操作界面,添加了上传下载速度进度,和图片预览功能。源码里面有Test类,因为是为了学习swing mvc才打算做一个的,...