FTP上传及读取内容

一、 读取FTP上文件内容

注意使用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;
   }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值