package nc.bs.ht.ftp;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import javax.servlet.http.HttpServletResponse;
import nc.vo.hr.tools.pub.StringUtils;
import nc.vo.pub.BusinessException;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
/**
* FTP工具类
* @author 麻杰 <br>
* 日期:2010-08-10
*/
public class FtpTools {
/**
* 上传程序方法
*
*/
public boolean uploadFile(String url, int port, String username,
String password, String path, String filename, InputStream input) {
// filename:要上传的文件
// path :上传的路径
// 初始表示上传失败
boolean success = false;
// 创建FTPClient对象
FTPClient ftp = new FTPClient();
try {
int reply;
// 连接FTP服务器
// 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
ftp.connect(url, port);
// 下面三行代码必须要,而且不能改变编码格式,否则不能正确下载中文文件
ftp.setControlEncoding("GBK");
FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);
conf.setServerLanguageCode("zh");
// 登录ftp
ftp.login(username, password);
// 看返回的值是不是230,如果是,表示登陆成功
reply = ftp.getReplyCode();
// 以2开头的返回值就会为真
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
System.out.println("连接服务器失败");
return success;
}
System.out.println("登陆服务器成功");
ftp.changeWorkingDirectory(path);// 转移到FTP服务器目录
FTPFile[] fs = ftp.listFiles(); // 得到目录的相应文件列表
System.out.println(fs.length);
System.out.println(filename);
String filename1 = FtpTools.changeName(filename, fs);
String filename2 = new String(filename1.getBytes("GBK"),
"ISO-8859-1");
String path1 = new String(path.getBytes("GBK"), "ISO-8859-1");
// 转到指定上传目录
ftp.changeWorkingDirectory(path1);
// 将上传文件存储到指定目录
// ftp.appendFile(new String(filename.getBytes("GBK"),"ISO-8859-1"),
// input);
ftp.setFileType(FTP.BINARY_FILE_TYPE);
//如果缺省该句 传输txt正常 但图片和其他格式的文件传输出现乱码
ftp.storeFile(filename2, input);
// 关闭输入流
input.close();
// 退出ftp
ftp.logout();
// 表示上传成功
success = true;
System.out.println("上传成功。。。。。。");
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
}
}
}
return success;
}
/**
* 删除程序
*
*/
public boolean deleteFile(String url, int port, String username,
String password, String path, String filename) {
// filename:要上传的文件
// path :上传的路径
// 初始表示上传失败
boolean success = false;
// 创建FTPClient对象
FTPClient ftp = new FTPClient();
try {
int reply;
// 连接FTP服务器
// 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
ftp.connect(url, port);
// 下面三行代码必须要,而且不能改变编码格式,否则不能正确下载中文文件
ftp.setControlEncoding("GBK");
FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);
conf.setServerLanguageCode("zh");
// 登录ftp
ftp.login(username, password);
// 看返回的值是不是230,如果是,表示登陆成功
reply = ftp.getReplyCode();
// 以2开头的返回值就会为真
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
System.out.println("连接服务器失败");
return success;
}
System.out.println("登陆服务器成功");
String filename2 = new String(filename.getBytes("GBK"),
"ISO-8859-1");
String path1 = new String(path.getBytes("GBK"), "ISO-8859-1");
// 转到指定上传目录
ftp.changeWorkingDirectory(path1);
FTPFile[] fs = ftp.listFiles(); // 得到目录的相应文件列表
ftp.logout();
success=true;
} catch (IOException e) {
System.out.println(e);
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
}
}
}
return success;
}
public static boolean TestCon(String ip, int port, String username,String password) throws BusinessException {
boolean success = false;
FTPClient ftp = new FTPClient();
try {
int reply;
ftp.connect(ip, port);
// 下面三行代码必须要,而且不能改变编码格式
ftp.setControlEncoding("GBK");
FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);
conf.setServerLanguageCode("zh");
// 如果采用默认端口,可以使用ftp.connect(url) 的方式直接连接FTP服务器
ftp.login(username, password);// 登录
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
throw new BusinessException("用户名密码不正确");
//return success;
}
System.out.println("登陆成功。。。。");
ftp.logout();
success = true;
}catch (Exception e) {
if (e instanceof BusinessException) {
throw (BusinessException) e;
}else{
throw new BusinessException(e.getMessage(), e);
}
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
}
}
}
return success;
}
/**
* 下载程序
*
*/
public static boolean downFile(String ip, int port, String username,
String password, String remotePath, String fileName,String localPath
) {
boolean success = false;
FTPClient ftp = new FTPClient();
try {
int reply;
ftp.connect(ip, port);
// 下面三行代码必须要,而且不能改变编码格式
ftp.setControlEncoding("GBK");
FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);
conf.setServerLanguageCode("zh");
// 如果采用默认端口,可以使用ftp.connect(url) 的方式直接连接FTP服务器
ftp.login(username, password);// 登录
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return success;
}
System.out.println("登陆成功。。。。");
ftp.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录
FTPFile[] fs = ftp.listFiles(); // 得到目录的相应文件列表
// System.out.println(fs.length);//打印列表长度
if (StringUtils.hasText(fileName)){
for (int i = 0; i < fs.length; i++) {
FTPFile ff = fs[i];
if (ff.getName().equals(fileName)) {
// String filename = fileName;
// // 这个就就是弹出下载对话框的关键代码
// response.setHeader("Content-disposition",
// "attachment;filename="
// + URLEncoder.encode(filename, "utf-8"));
// 将文件保存到输出流outputStream中
File file_out = new File(localPath + File.separator + ff.getName());
FileOutputStream outputStream = new FileOutputStream(file_out);
ftp.retrieveFile(new String(ff.getName().getBytes("GBK"),"ISO-8859-1"), outputStream);
outputStream.flush();
outputStream.close();
}
}
}else {
for (int i = 0; i < fs.length; i++) {
FTPFile ff = fs[i];
if (ff.isFile()){
File file_out_bak = new File(localPath + File.separator + ff.getName() + "bak");
File file_out = new File(localPath + File.separator + ff.getName());
if (file_out.exists()){
long timestamp1 = ff.getTimestamp().getTimeInMillis();
long timestamp2 = file_out.lastModified();
if (timestamp1>timestamp2){
file_out.renameTo(new File(localPath + File.separator + file_out.getName()+"update"));
File file_out2 = new File(localPath + File.separator + ff.getName());
FileOutputStream outputStream = new FileOutputStream(file_out2);
// 将文件保存到输出流outputStream中
ftp.retrieveFile(new String(ff.getName().getBytes("GBK"),"ISO-8859-1"), outputStream);
outputStream.flush();
outputStream.close();
}
}else if (file_out_bak.exists()){
long timestamp1 = ff.getTimestamp().getTimeInMillis();
long timestamp2 = file_out_bak.lastModified();
if (timestamp1>timestamp2){
FileOutputStream outputStream = new FileOutputStream(file_out);
// 将文件保存到输出流outputStream中
ftp.retrieveFile(new String(ff.getName().getBytes("GBK"),"ISO-8859-1"), outputStream);
outputStream.flush();
outputStream.close();
}
}else {
FileOutputStream outputStream = new FileOutputStream(file_out);
// 将文件保存到输出流outputStream中
ftp.retrieveFile(new String(ff.getName().getBytes("GBK"),"ISO-8859-1"), outputStream);
outputStream.flush();
outputStream.close();
}
}
}
}
ftp.logout();
success = true;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
}
}
}
return success;
}
// 判断是否有重名方法
public static boolean isDirExist(String fileName, FTPFile[] fs) {
for (int i = 0; i < fs.length; i++) {
FTPFile ff = fs[i];
if (ff.getName().equals(fileName)) {
return true; // 如果存在返回 正确信号
}
}
return false; // 如果不存在返回错误信号
}
// 根据重名判断的结果 生成新的文件的名称
public static String changeName(String filename, FTPFile[] fs){
int n = 0;
// 创建一个可变的字符串对象 即StringBuffer对象,把filename值付给该对象
StringBuffer filename1 = new StringBuffer("");
filename1 = filename1.append(filename);
System.out.println(filename1);
while (isDirExist(filename1.toString(), fs)) {
n++;
String a = "[" + n + "]";
System.out.println("字符串a的值是:" + a);
int b = filename1.lastIndexOf(".");// 最后一出现小数点的位置
int c = filename1.lastIndexOf("[");// 最后一次"["出现的位置
if (c < 0) {
c = b;
}
StringBuffer name = new StringBuffer(filename1.substring(0, c));// 文件的名字
StringBuffer suffix = new StringBuffer(filename1.substring(b + 1));// 后缀的名称
filename1 = name.append(a).append(".").append(suffix);
}
return filename1.toString();
}
}
相关推荐
通过该软件,用户可以直接在Windows资源管理器中打开并编辑机床程序文件,无需借助其他专用的数控系统软件。这种直观的操作方式大大降低了学习曲线,使得新手也能快速上手。同时,它提供了对多种文件格式的支持,...
用户可以预先将NC程序存储在Serv-U服务器上,然后通过发那科0iMF工具将其下载到数控系统中,或者将已执行过的程序和日志数据上传至服务器进行分析和备份。 软件/插件标签表明,发那科0iMF网络传输工具可能是一个...
这款软件的核心价值在于它提供了高效、精确的NC(Numerical Control)代码编辑和管理工具,帮助用户在数控机床的编程过程中实现更高效的工作流程。 首先,CIMCO EDIT的重要特性之一是其轨迹查看功能。通过这个功能...
wsockexpert和Netcat配合,可以在抓包的同时进行数据的发送和接收,对于测试网络服务、模拟通信场景非常有用。 4. **与Winhex的结合**:当wsockexpert捕获到的数据包需要进一步分析时,Winhex可以提供帮助。它可以...
例如,`ping`命令可以测试网络的可达性,`traceroute`(或`tracert`)可以追踪数据包从源到目的地的路径,`nc`(netcat)和`socat`工具则能创建TCP或UDP连接来进行数据传输测试。 支持多连接的TCP UDP连接工具,...
在实际应用中,通常会结合这两个库,先使用netcdf-4.3.22.jar读取NetCDF文件中的科学数据,然后用wContour.jar将其可视化为等值线图。需要注意的是,由于NetCDF文件可能包含多维数据,所以在处理时可能需要对数据...
它为应用程序提供了全双工的通信方式,即数据可以在两个方向上同时传输。TCP通过三次握手建立连接,并在数据传输过程中采用确认、重传、流量控制和拥塞控制等机制,确保数据的正确无误传输。由于这些特性,TCP通常...
在Windows环境下,可以使用telnet或者netcat (nc)工具进行TCP连接,以及ftp命令行工具进行文件传输。 总的来说,这个实验涵盖了以下几个关键知识点: 1. MFC库的使用,特别是CInternetSession和CFTPConnection类。...
它在 Windows NT/2000/XP 中均可使用,但在 Windows 98 中却没有集成这一个工具。 4. explorer-------打开资源管理器 5. logoff---------注销命令 6. shutdown-------60秒倒计时关机命令 7. lusrmgr.msc----本机...
在实际开发中,开发者可能会使用一些工具来辅助Socket通信,例如Wireshark抓包工具查看网络通信过程,或者使用Netcat(nc)工具进行简单的测试。同时,IDE如Eclipse或IntelliJ IDEA也提供了内置的Socket调试功能,...
对于端口号,netstat命令可以显示本地机器打开的端口以及它们对应的进程,而telnet或nc(netcat)工具可以用来测试特定端口是否开放。 在编程领域,网络库如Python的socket模块、Java的Socket类等,提供了API来创建...
这可能涉及使用FTP、TCP/IP或其他专有协议,以确保数据在传输过程中不被篡改或丢失。安全传输能防止因数据错误而导致的机床故障,减少生产中断的风险。 3. CNC编程语言理解: G代码(也称为RS-274)和M代码是CNC...
`-c`选项可以在不解压的情况下查看内容,`-d`用于指定解压目标目录。 二、文件管理 Linux中的文件管理命令包括`ls`、`cd`、`mkdir`、`rm`等。`ls`用于列出目录内容,`cd`用于切换目录,`mkdir`创建新目录,`rm`...
使用网络工具如telnet、nc(netcat)和Wireshark可以检查端口的状态和网络流量。 在“计算机端口大全”中,你可能会找到更详细的信息,例如各个知名端口对应的典型服务,如何查看和管理系统的开放端口,以及如何...
9. **网络工具**:Cygwin还包括各种网络工具,如ssh(安全外壳协议)、ftp(文件传输协议)、nc(netcat)等,方便用户进行网络连接和数据传输。 10. **兼容性**:Cygwin不仅支持标准的POSIX接口,还可以运行许多...
- `--passive-ftp`:使用被动FTP传输模式,这在某些有防火墙的环境中是必要的。 7. **递归功能相关选项**: - `-r` 或 `--recursive`:沿着链接递归下载。此功能允许用户下载包含多个链接的HTML页面,并递归地...
描述中提到这是一个小型程序,包含两个文件,可以直接编译并使用,且具有小巧实用的特点。从标签“unix file_linux unix_file”我们可以推测,这个程序可能涉及Linux和UNIX系统之间的文件操作。压缩包内的文件名...
8. **网络功能**:UNIX内置了丰富的网络工具,如`telnet`、`ssh`进行远程登录,`ftp`、`sftp`进行文件传输,`nc`(netcat)用于网络调试。 9. **文本编辑器**:UNIX中有著名的文本编辑器如`vi`(Vim)和`emacs`,...
"Windows平台下的网络调试助手"是一款专为此目的设计的工具,它可以帮助开发者更好地理解和解决网络程序中的问题。下面我们将深入探讨该主题,详细介绍如何利用这样的工具进行网络调试,并探索相关的知识点。 1. **...