最近接到一个任务:为了确保安全,在删除ftp服务器上文件之前需要用1k大小的随机数重写该文件。
该操作需要用到Apache commons-net 包下面的FTPClient类,为了重写文件,我用到了该类的storeFileStream(String remote)方法,该方法返回一个OutputStream,起初没注意到OutputStream的flush和close方法就调用FTPClient类的deleteFile方法,如果该方法运行成功则返回true,但是碰到了一个奇怪的现象,deleteFile方法返回了true并没有删除文件。CSDN的网友告诉我可能是因为有文件打开着,并没有删除成功。
后来我调用了OutputStream的flush和close方法。读写第一个文件时总是正确的,当相同API读写第二个文件时,block住了。好友海波提醒了我storeFileStream(String remote)方法因为不能马上处理流,所以需要用户手工调用completePendingCommand。FTPClient要求在进行流操作之后执行completePendingCommand,以确保流处理完毕,因为流处理不是即时的,所以也没有办法手工调用completePendingCommand。于是改用public boolean storeFile(String remote, InputStream local)方法,成功解决该问题。
分享到:
相关推荐
本教程将深入讲解如何使用Java Servlet、Apache Commons IO库(版本2.4)以及Apache Commons FileUpload库(版本1.3)来实现这一功能。 一、Apache Commons IO与FileUpload库介绍 Apache Commons IO是一个Java库,...
- **介绍**:IO库是Apache Commons的另一个关键模块,它提供了大量的I/O操作相关的工具类,如文件操作、流操作、转换和检查等。 - **功能**:在文件上传场景中,Commons IO可以帮助我们处理文件读写、复制、比较等...
例如,将上传的文件保存到服务器的指定位置,或者读取上传文件的内容进行验证,这些都可能用到 Commons IO 的方法。 Struts2框架整合这两个库,提供了方便的文件上传Action,使得开发者无需关心底层实现细节。例如...
5. **文件命名策略**:为了避免文件名冲突,可以采用时间戳、随机数等策略对上传文件进行重新命名。 在`iteye`博客的链接中,博主可能详细讲述了这些步骤,并可能分享了在实际开发中遇到的问题及解决方法。通过阅读...
Commons FileUpload是Apache软件基金会的一个开源项目,提供了一个强大的、灵活的、且易于使用的Java API,用于处理HTTP请求中的文件上传。在Web开发中,尤其是基于Servlet和JSP的应用中,用户经常需要上传文件,如...
1. **FTP任务**:支持FTP(文件传输协议)操作,如上传、下载、删除和列举远程服务器上的文件。 2. **HTTP任务**:允许执行HTTP请求,如GET、POST,以及下载网页或发送数据到Web服务器。 3. **SMTP任务**:发送...
为了避免重新造轮子,我们可以使用优秀的开源对象池化组件apache-commons-pool2,它对对象池化操作进行了很好的封装,我们只需要根据自己的业务需求重写或实现部分接口即可,使用它可以快速的创建一个方便,简单,...
标题中的"commons-logging-1.1.1"是指Apache Commons Logging库的1.1.1版本。这个库是Java编程语言中一个重要的日志抽象层,它允许开发者在不改变代码的情况下,自由地切换底层的日志实现,如Log4j、Java内置的日志...
在文件上传场景中,`commons-io`主要用来进行文件的读写操作,如复制、移动、删除等。在FileUpload处理完上传请求后,可能需要使用IO库来将文件保存到最终的位置。例如: - `FileUtils`: 提供了文件和目录的实用...
在文件上传过程中,我们需要对文件进行读写操作,如临时存储上传的文件,这时Commons IO库就派上了用场。 使用这两个库进行文件上传的步骤大致如下: 1. **配置Servlet容器**:确保在Servlet容器(如Tomcat)的类...
在"apache的包"中提到的"commons"可能指的是Apache Commons项目,这是一个包含许多实用工具类库的集合,如Commons IO、Commons Lang和Commons Net等,它们为Java开发提供了便利的功能,如文件操作、字符串处理和网络...
然而,仅仅依靠Servlet API来实现文件上传可能会比较复杂,因此开发者通常会使用第三方库如Apache Commons FileUpload和Apache Commons IO来简化这个过程。Apache Commons FileUpload提供了一套易于使用的API,使得...
本主题将深入探讨如何使用Apache Servlet进行文件的上传和下载。 一、文件上传 在Servlet中,文件上传通常涉及表单数据的处理。HTML表单使用`<input type="file">`元素来允许用户选择本地文件。当用户提交表单时,...
本项目是基于Struts2实现的文件上传功能,使用了Apache的两个开源库:commons-fileupload和commons-io。这两个库在处理文件上传方面起到了关键作用。 1. **Struts2框架**: Struts2作为Java EE应用程序的中心框架...
在文件上传场景中,JSP通常用于创建用户界面,如表单元素,用户通过这些元素选择本地文件进行上传。 2. Struts框架应用: Struts框架提供了Action类,它是处理用户请求的核心。在文件上传中,我们需要创建一个继承...
Apache工具包是开源软件项目Apache的一部分,它包含了一系列用于管理和维护服务器环境的实用程序。这些工具在系统管理、网络服务优化、日志分析等方面发挥着重要作用。以下是对Apache工具包中一些常见工具的详细解释...
4. **丰富的配置选项**:Apache的配置文件(httpd.conf)允许用户自定义服务器行为,包括端口设置、虚拟主机配置、访问控制策略等。 5. **URL映射和重写**:通过mod_rewrite模块,可以实现复杂的URL转换,优化SEO,...
FTP(File Transfer Protocol)是一种广泛使用的网络协议,用于在互联网上进行文件传输。在这个主题中,我们将深入讨论如何创建一个简单的FTP服务器程序,主要关注Java编程语言实现的FTP服务器。 FTP服务器程序的...
Struts框架提供了`org.apache.struts.upload`包,专门处理文件上传功能。它基于Commons FileUpload库,该库是Apache的一个子项目,负责处理HTTP多部分请求,即HTML表单中的文件输入字段。 二、环境准备 1. 引入依赖...