博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过SMB协议上传,下载文件.
阅读量:6247 次
发布时间:2019-06-22

本文共 4389 字,大约阅读时间需要 14 分钟。

  hot3.png

项目中遇到要和ESKO软件进行数据对接,采用热文件夹形式,走xml数据交互.记录下点滴.前提:文件目录局域网共享出来. 

上传xml:

//实现过程:先把一串XML数据源,写入本地文件,再通过SMB协议上传到指定服务器.可有办法直接把XML数据源写入远程?        String xml = "
"; String fileName="A.xml"; //本地服务的目录 String localFile = "\\\\192.168.0.100\\upload\\TEMPXML\\"+fileName; //远程服务目录 String eskofilePath = YssetHelper.getESKOFilePath(session,"UP"); //先把xml写入本地目录 BufferedWriter bw = null; try { File dir = new File(localFile); if (!dir.exists()) dir.createNewFile(); OutputStreamWriter writerStream = new OutputStreamWriter(new FileOutputStream(localFile),"UTF-8"); bw = new BufferedWriter(writerStream); bw.write(xml); bw.flush(); } catch (Exception e) { throw e; } finally { if (bw != null) { bw.close(); } } //本地文件传送至esko远程目录 smb://Administrator:yy@192.168.0.189/upload/XML //若服务器账户密码有关键字@,则不能直接这么拼接. try { SMBUtil smb = SMBUtil.getInstance("smb:"+eskofilePath); smb.init(); File f = new File(localFile); smb.uploadFile(f);//上传文件 } catch (Exception e) { throw new Exception(e.getMessage()); }

下载xml数据:(这里就没必要写入文件了)

/**根据文件名到esko目录下找到xml文件,并转化为bean对象*/	public WorkOrder readXML(String fileName)throws Exception{		String eskofilePath = YssetHelper.getESKOFilePath(session,"DOWN");		SMBUtil smb = SMBUtil.getInstance("smb:"+eskofilePath+fileName);		smb.init();		String xmlStr = smb.downloadFile();		WorkOrder work = (WorkOrder)XmlUtil.xml2Java(xmlStr,WorkOrder.class);		return work;	}

下面贴上SMBUtil,想了解 xml2Java 和java2xml.可以关注我的其它文章.

 

package dockingESKO.util;import java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.net.MalformedURLException;import jcifs.smb.SmbFile;import jcifs.smb.SmbFileInputStream;import jcifs.smb.SmbFileOutputStream; /** * 通过SMB协议发送文件到远程服务器 * */public class SMBUtil {         private String url = "";    private SmbFile smbFile = null;    private SmbFileOutputStream smbOut = null;     private static SMBUtil smb = null;    /**     * 得到SMB和连接的方法     * @param url     * @return     */    public static synchronized SMBUtil getInstance(String url) {       if(smb == null)           return new SMBUtil(url);       return smb;     }      private SMBUtil(String url) {         this.url = url;     }     public void init() {        try {           System.out.println("connecting...url:" + this.url);            smbFile = new SmbFile(this.url);            smbFile.connect();            System.out.println("connect successfu...url:" + this.url);         }catch (MalformedURLException e) {            e.printStackTrace();         }catch (IOException e) {            e.printStackTrace();         }    }     /**     * 上传文件到服务器     * @param file     * @return     */    public void uploadFile(File file) throws Exception{        BufferedInputStream bf = null;         try{            this.smbOut = new SmbFileOutputStream(this.url + "/" + file.getName(), false);             bf = new BufferedInputStream(new FileInputStream(file));             byte[] bt = new byte[8192];             int n = bf.read(bt);             while (n != -1){                 this.smbOut.write(bt, 0, n);                 this.smbOut.flush();                 n = bf.read(bt);             }             System.out.println("file transmission complete...");         }finally{            try {                 if(null != this.smbOut)                     this.smbOut.close();                 if(null != bf)                     bf.close();             }catch(Exception e2) {                 e2.printStackTrace();             }        }     }     public String downloadFile()throws Exception{    	 SmbFile smbFile = new SmbFile(url);    	 if(smbFile==null||!smbFile.exists()){    		 throw new Exception("未找到ESKO数据!");    	 }    	 String result="";         int length = smbFile.getContentLength();// 得到文件的大小           byte buffer[] = new byte[length];           SmbFileInputStream in = new SmbFileInputStream(smbFile);         // 建立smb文件输入流           while ((in.read(buffer)) != -1) {        	 result=new String(buffer, "UTF-8");         }         in.close();         System.out.println(result);         return result;    }         public static void main(String[] args) {        SMBUtil smb = SMBUtil.getInstance("smb://用户名:密码@服务器IP/COMMODITY");         File file = new File("E://服务器信dd息.txt");       // smb.uploadFile(file);//上传文件     }}

 

转载于:https://my.oschina.net/return/blog/1786195

你可能感兴趣的文章
OpenCV 2.4.3 发布,开源计算机视觉库
查看>>
第49周星期四
查看>>
二叉搜索树转双向链表
查看>>
【电信增值业务学习笔记】11 基于Parlay的增值业务提供技术
查看>>
用“分支判断”来为程序“解套”
查看>>
ubuntu Linux下DHCP的配置
查看>>
新塘连接
查看>>
Vim删除重复行
查看>>
预处理语句
查看>>
2012第52周五阴小雨
查看>>
滚动双联广告
查看>>
linux sort,uniq,cut,wc命令详解
查看>>
纯CSS和Javascript实现的遮罩层
查看>>
python类型转换、数值操作
查看>>
关于Scalability的一些思考与疑问
查看>>
mongodb step by step
查看>>
一句话一个点
查看>>
深入浅出事件流处理NEsper(二)
查看>>
技术人生:如何做非正式的交流
查看>>
利用共享内存和信号灯集实现进程间同步一例
查看>>