注意使用UTF-8编码:避免中文乱码!
public static String readFtpFileInfo(String host, int port, String username, String password, String remotePath, String fileName) {
String fileInfo = null;
FTPClient ftp = new FTPClient();
try {
ftp.connect(host, port);
ftp.login(username, password);// 登录
if (FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
//是否连接成功,成功true,失败false
if (ftp.changeWorkingDirectory(remotePath)) {
//找到指定目录
FTPFile[] fs = ftp.listFiles();
if (fs != null && fs.length > 0) {
InputStream inputStream = ftp.retrieveFileStream(fileName);//根据指定名称获取指定文件
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
String line = null;
StringBuilder stringBuilder = new StringBuilder(150);
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line + "\n");
}
fileInfo = stringBuilder.toString();
String context = stringBuilder.toString();
String[] sz = context.replaceAll("\"", "").split("\n");
for (int i = 0; i < sz.length; i++) {
System.out.println(sz[i]);//输出每一行的数据
}
}
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
}
}
}
return fileInfo;
}
二、上传XML文件至FTP服务器
2.1 生成xml文件,采用dom4j方式。
2.1.1 加入maven依赖
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.7.1</version>
</dependency>
2.2.2 使用dom4j生成xml报文
public static void main(String[] args) {
Document doc = DocumentHelper.createDocument();
doc.setXMLEncoding("UTF-8");
Element root = doc.addElement("ADI").addAttribute("xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance"); // 声明根节点为ADI
Element ObjectsElement= root.addElement("Objects"); // 在ADI节点中添加Objects
Element object = ObjectsElement.addElement("Object")
.addAttribute("Action", "新增")
.addAttribute("ElementId","Id"); // 在Objects节点中添加Object,且添加属性 Action 与 ElementId
object .addElement("Property").addAttribute("Name", "Name").addText("名字"); // 在object中添加Name元素
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
// 设置XML编码方式,即是用指定的编码方式保存XML文档到字符串(String),这里也可以指定为GBK或是ISO8859-1
outputFormat.setEncoding("UTF-8");
// outputFormat.setSuppressDeclaration(true); //是否生产xml头
outputFormat.setIndent(true); //设置是否缩进
outputFormat.setIndent(" "); //以四个空格方式实现缩进
outputFormat.setNewlines(true);
outputFormat.setNewLineAfterDeclaration(false);
// stringWriter字符串是用来保存XML文档的
StringWriter stringWriter = new StringWriter();
// xmlWriter是用来把XML文档写入字符串的(工具)
try {
XMLWriter xmlWriter = new XMLWriter(stringWriter, outputFormat);
// 把创建好的XML文档写入字符串
xmlWriter.write(doc);
// 打印字符串,即是XML文档
System.out.println(stringWriter.toString());
xmlWriter.close();
// 上传Xml
FtpUtil.uploadFile(IP, PORT, USERNAME, PASSWORD,
FilePath, fileName, stringWriter.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
打印xml报文如下:
<?xml version="1.0" encoding="UTF-8"?>
<ADI xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Objects>
<Object Action="新增" ElementId="Id">
<Property Name="Name">名字</Property>
</Object>
</Objects>
</ADI>
2.2.3 上传内容至FTP服务器
public static boolean uploadFile(String host, int port, String username, String password, String filePath, String fileName, String data) throws Exception{
boolean result = false;
FTPClient ftp = new FTPClient();
try {
int reply;
ftp.connect(host, port);// 连接FTP服务器
// 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
ftp.login(username, password);// 登录
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return result;
}
ftp.setControlEncoding("UTF-8");
//设置上传文件的类型为二进制类型
ftp.setFileType(FTP.BINARY_FILE_TYPE);
//设置为被动模式
ftp.enterLocalPassiveMode();
String tempPath = filePath;
if (!ftp.changeWorkingDirectory(new String(tempPath.getBytes(),FTP.DEFAULT_CONTROL_ENCODING))) {
//判断目录是否存在,如果目录不存在创建目录,目录存在则跳转到此目录下
String []tempPathList = tempPath.split("/");
for (String dir : tempPathList) {
if(dir != null && !dir.equals("")){
if (!ftp.changeWorkingDirectory(dir)) {
if (!ftp.makeDirectory(dir)) {
return result;
} else {
ftp.changeWorkingDirectory(dir);
}
}
}
}
}
//上传文件
InputStream input = new ByteArrayInputStream(data.getBytes("UTF-8"));
result = ftp.storeFile(new String(fileName.getBytes("UTF-8"),"iso-8859-1"), input);
if(!result){
return result;
}
input.close();
ftp.logout();
result = true;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
}
}
}
return result;
}