您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > oracle中实现ftp文件上传下载
敲好最近有机会用到ftp发送接收文件,总结一下oracle里面ftp发送接收的方法。Java中可以使用sun.net.ftp.FtpClient实现简单的ftp操作,这是在oracle数据库中有提供api的。我个人觉得对于ftp的操作用java方式比较方便,代码简单容易懂而且广泛。不过oracle中也有提供ftp访问的包UTL_TCP,通过这个包也可以很方便的实现ftp操作。Java方式实现ftp客户端操作在oracle数据库中有提供sun.net.ftp.FtpClient,所以可以直接使用该包完成简单的ftp操作在oracle数据库端。这里有个问题没有解决:ftp文件追加时候,发现没有提供FtpClient.append()函数,但是在一般的java程序中式可以使用,测试都是在jdk1.4版本上进行的。还是在oracle里面这个功能不允许还是我没有找到append替代方法呢?createorreplaceandcompilejavasourcenamedremoteFtpClientASpackageoracle.apps.zz.zzmes;importjava.io.BufferedReader;importjava.io.DataInputStream;importjava.io.File;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.RandomAccessFile;importjava.io.FileInputStream;importjava.util.StringTokenizer;importsun.net.TelnetInputStream;importsun.net.TelnetOutputStream;importsun.net.ftp.FtpClient;importsun.net.*;importsun.net.ftp.*;//importorg.apache.*;//importorg.apache.commons.net.ftp.*;//importorg.apache.commons.net.ftp.FTP.*;//importorg.apache.commons.net.ftp.FTP.*;publicclassremoteFtpClient{privateStringhost;privateStringusername;privateStringpassword;privateFtpClientclient;publicremoteFtpClient(){}publicremoteFtpClient(StringHost,StringuserName,StringpassWord){this.host=Host;//ip地址this.username=userName;;//用户名this.password=passWord;//密码this.client=newFtpClient();}publicvoidsetHost(StringHost){host=Host;}publicvoidsetUserName(StringuserName){username=userName;}publicvoidsetPassword(Stringpwd){password=pwd;}/***********************************获取和远程ftp服务器的连接**********************************/publicbooleangetFtpConnection(){//client=newFtpClient();try{client.openServer(host);client.login(username,password);//client.ascii();client.binary();//client.setConnectTimeout(6000);//设置超时System.out.println(loginsucess);}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();returnfalse;}returntrue;}/***********************************关闭ftp连接**********************************/publicvoidcloseConnection(){if(client!=null){try{client.closeServer();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}client=null;}}/**************************************实现ftp文件上传*parameters*fileName:文件名*sendcontent:要发送的内容*path:上传的路径,路径为空则取登录ftp后的默认路径*return:成功返回true,失败返回false*************************************/publicbooleansendXml2Ftp(StringfileName,StringsendContent,Stringpath){try{if(path!=null)client.cd(path);//发现在数据库中不能使用client.append(path);StringlineSeparator=System.getProperty(line.separator);TelnetOutputStreamos=client.put(fileName);//创建一个新的文件或者覆盖//client.rename(index,wip);//重新命名文件名称//TelnetOutputStreamos=client.append(fileName);//os.write(sendContent.getBytes(UTF-8));//os.write(sendContent.getBytes(GB2312));Stringencoding=System.getProperty(file.encoding);os.write(sendContent.getBytes(encoding));os.close();//client.rename(arg0,arg1)//client.sendServer(DELEwip.xml);//删除文件}catch(IOExceptione){System.out.println(insertarecordtoerrortable!);//TODOAuto-generatedcatchblocke.printStackTrace();returnfalse;}returntrue;}publicstaticStringreplaceAllString(Stringstr,Stringpattern,Stringreplaces){StringBufferresult=newStringBuffer();StringTokenizerstrToken=newStringTokenizer(str,pattern);while(strToken.hasMoreTokens()){result.append((String)strToken.nextToken());result.append(replaces);}returnresult.toString();}/***********************************实现ftp下载*parameters:*fileName:文件名称*path:文件路径*return:ftp文件内容**********************************/publicStringloadXml2Temp(StringfileName,Stringpath){TelnetInputStreamfget;StringxmlString=null;Stringencoding=System.getProperty(file.encoding);Stringtemp;try{if(path!=null)client.cd(path);fget=client.get(fileName);//InputStreamReaders=newInputStreamReader(fget,GB2312);//接收的字符集需要和要下载的文件最好字符集相同,否则在中文时候会有乱码InputStreamReaders=newInputStreamReader(fget,UTF-8);BufferedReaderin=newBufferedReader(s);StringBuffersb=newStringBuffer();while((temp=in.readLine())!=null){sb.append(temp.trim());sb.append(\n);}xmlString=sb.toString();s.close();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();returnnull;}returnxmlString;}}通过在另一个java存储过程调用以上的以上ftp存储过程,可以实现ftp文件的上传下载例如:createorreplaceandcompilejavasourcenamedftpSendGetTestASpackageoracle.apps.zz.zzmes;importjava.sql.Clob;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.util.Hashtable;importoracle.xml.sql.query.OracleXMLQuery;importjava.io.*;importsun.net.ftp.FtpClient;importoracle.sql.*;importoracle.jdbc.OracleDriver;importjava.sql.Connection;publicclassftpSendGetTest{//实现ftp下载,并转换为xml文件格式并返回clobpublicstaticCLOBgetXml(Stringhost,Stringusername,Stringpwd,StringfileName,Stringpath){Stringxml=;CLOBtempClob=null;//ftp类构造remoteFtpClientfc=newremoteFtpClient(host,username,pwd);if(fc.getFtpConnection()){//连接ftpxml=fc.loadXml2Temp(fileName,path);//调用下载函数if(xml!=null){try{//实现String转换为clobConnectionconn=newOracleDriver().defaultConnection();tempClob=CLOB.createTemporary(conn,true,CLOB.DURATION_SESSION);tempClob.open(CLOB.MODE_READWRITE);WritertempClobWriter=tempClob.getCharacterOutputStre
本文标题:oracle中实现ftp文件上传下载
链接地址:https://www.777doc.com/doc-10973 .html