




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、敲好最近有机会用到ftp发送接收文件,总结一下oracle里面ftp发送接收的方法。Java 中可以使用.ftp.FtpClient 实现简单的ftp操作,这是在oracle数据库中有提供 api 的。我个人觉得对于ftp的操作用java方式比较方便,代码简单容易懂而且广泛。不过oracle 中也有提供ftp访问的包UTL_TCP,通过这个包也可以很方便的实现 ftp操作。Java方式实现ftp客户端操作在oracle数据库中有提供 .即.FtpClient,所以可以直接使用该包完成简单的ftp操作在oracle数据库端。这里有个问题没有解决:ftp文件追加时候,发现没有提供FtpClient
2、.append() 函数,但是在一般的java程序中式可以使用,测试都是在jdk1.4版本上进行的。还是在 oracle里面这个功能不允许还是我没有找到append替代方法呢?createorreplaceandcompilejavasourcenamedremoteFtpClient ASpackage oracle.apps.zz.zzmes;importjava.io.BufferedReader; importjava.io.DataInputStream; importjava.io.File;importjava.io.IOException;importjava.io.Input
3、StreamReader; importjava.io.RandomAccessFile; importjava.io.FileInputStream; importjava.util.StringTokenizer; .TelnetInputStream; .TelnetOutputStream; .ftp.FtpClient; .*;.ftp.*;importorg.apache.*;.ftp.*;.ftp.FTP.*;.ftp.FTP.*;publicclass remoteFtpClientprivatestring host;privatestring username;privat
4、eStringpassword ;private FtpClientclient;public remoteFtpClient()public remoteFtpClient( String Host, String userName, StringpassWordthis.host=Host;/ip 地址this.username=userName;用户名this.password= passWord ;/ 密码this.client= new FtpClient();public voidsetHost( String Host)host=Host;public voidsetUserNa
5、me( String userName)username=userName;public voidsetPassword( String pwd)password =pwd;*获取和远程ftp服务器的连接 */publicboolean getFtpConnection() /client= new FtpClient();try client.openServer(host);client.login(username, password );client.ascii();client.binary();6000 );设置超时client.setConnectTimeout(System.o
6、ut.println(loginsucess);catch(IOExceptione) /TODO Auto -generated catch block e.printStackTrace();returnfalse ;returntrue ;/*关闭即连接*/public voidcloseConnection() if(client!= null ) try client.closeServer();catch(IOExceptione)/TODO Auto -generated catch blocke.printStackTrace();client= null ;/*实现即文件上传
7、parameters*fileName:文件名*sendcontent :要发送的内容*path :上传的路径,路径为空则取登录ftp后的默认路径*return:成功返回true ,失败返回false*/ publicboolean sendXml2Ftp( String fileName, String sendContent, String path)tryif(path!= null )client.cd(path); / 发现在数据库中不能使用 client.append(path);String lineSeparator=System.getProperty(line.separa
8、tor);TelnetOutputStreamos=client.put(fileName);/ 创建一个新的文件或者覆盖/client.rename(index,wip); 重新命名文件名称TelnetOutputStreamos=client.append(fileName);os.write(sendContent.getBytes(UTF-8);os.write(sendContent.getBytes(GB2312);String encoding=System.getProperty(file.encoding); os.write(sendContent.getBytes(enc
9、oding);os.close();client.rename(arg0,arg1)/client.sendServer(DELEwip.xml); / 删除文件catch(IOExceptione)System.out.println(insertarecordtoerrortable!);/TODO Auto -generated catch blocke.printStackTrace();returnfalse ;returntrue ;publicstaticString replaceAllString( String str, String pattern, String rep
10、laces) StringBuffer result = new StringBuffer();StringTokenizerstrToken= new StringTokenizer(str,pattern);while (strToken.hasMoreTokens()result.append( String )strToken.nextToken();result.append(replaces);return result.toString();/*实现即下载parameters:*fileName:文件名称*path:文件路径*return:ftp 文件内容*/publicStri
11、ng loadXml2Temp( String fileName, String path) TelnetInputStreamfget;String xmlString= null ;String encoding=System.getProperty(file.encoding);String temp;tryif(path!= null )client.cd(path);fget=client.get(fileName);否则在中文时候会有乱码/InputStreamReaders= new InputStreamReader(fget,GB2312);/接收的字符集需要和要下载的文件最
12、好字符集相同,InputStreamReaders= new InputStreamReader(fget,UTF-8);BufferedReader in = new BufferedReader(s);StringBuffersb= new StringBuffer();while (temp=in.readLine()!= null )sb.append(temp.trim();sb.append(n);xmlString=sb.toString();s.close();catch(IOExceptione)/TODO Auto -generated catch blocke.print
13、StackTrace();returnnull ; return xmlString;通过在另一个java存储过程调用以上的以上ftp存储过程,可以实现ftp文件的上传下载例如:createorreplaceandcompilejavasourcenamed ftpSendGetTest ASpackage oracle.apps.zz.zzmes;importjava.sql.Clob;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.util.Ha
14、shtable;importoracle.xml.sql.query.OracleXMLQuery;importjava.io.*;.ftp.FtpClient;importoracle.sql.*;importoracle.jdbc.OracleDriver;importjava.sql.Connection;publicclass ftpSendGetTest/实现ftp下载,并转换为xml文件格式并返回clobpublicstaticCLOB getXml( String host, String username, String pwd, String fileName, String
15、 path)String xml=;CLOBtempClob= null ;/ftp类构造remoteFtpClientfc= new remoteFtpClient(host,username,pwd);if(fc.getFtpConnection() / 连接ftpxml=fc.loadXml2Temp(fileName,path); / 调用下载函数if(xml!= null )try / 实现String 转换为 clobConnectionconn= new OracleDriver().defaultConnection();tempClob=CLOB.createTemporar
16、y(conn, true ,CLOB.DURATION_SESSION);tempClob.open(CLOB.MODE_READWRITE);WritertempClobWriter=tempClob.getCharacterOutputStream();tempClobWriter.write(xml);tempClobWriter.flush();tempClobWriter.close();tempClob.close();conn.close();catch(SQLExceptione)/TODO Auto -generated catch blocke.printStackTrac
17、e();catch(IOExceptione)/TODO Auto -generated catch blocke.printStackTrace();fc.closeConnection(); / 关闭 ftp 连接 return tempClob;/发送数据到ftppublicstaticString sendxml( String host, String username, String pwd, String fileName, Str ing path, String content) String b=N;remoteFtpClientfc= new remoteFtpClien
18、t(host,username,pwd);if(fc.getFtpConnection() / 连接ftpif(fc.sendXml2Ftp(fileName,content,path) / 发送文件b=Y fc.closeConnection(); / 关闭 ftp 连接return b;Pl/sql中实现ftp客户端操作在oracle中提供了数据库包 SYS.utl_tcp实现客户端操作。ftp操作详细的可以查看该package.举例一个简单的ftp上传下载程序。ftp连接FUNCTION login(p_host INVARCHAR2 ,p_port INVARCHAR2,/ftp 端口
19、 21p_user INVARCHAR2 , p_pass INVARCHAR2p_timeout INNUMBER := NULL )RETURN UTL_TCP.connection ISl_connUTL_TCP.connection;BEGINl_conn:=UTL_TCP.open_connection(p_host,p_port,tx_timeout=p_timeout);get_reply(l_conn);send_command(l_conn,USER |p_user);send_command(l_conn,PASS |p_pass);RETURN l_conn;END ;f
20、tp关闭连接PROCEDURE logout(p_conn INOUTNOCOPY UTL_TCP.connection,p_reply INBOOLEAN := TRUE)ASl_replyt_string_table:=t_string_table();BEGINsend_command(p_conn, QUIT ,l_reply);UTL_TCP.close_connection(p_conn);END ;ftp下载FUNCTION get_remote_data(p_conn INOUTNOCOPY UTL_TCP.connection,p_file INVARCHAR2 )RETUR
21、NCLOBISl_connUTL_TCP.connection;l_amount PLS_INTEGER;l_buffer VARCHAR2 (32767 );l_data CLOB ;BEGINDBMS_LOB.createtemporary(lob_loc=l_data,cache= TRUE,dur=DBMS_LOB.call);l_conn:=get_passive(p_conn);send_command(p_conn, RETR|p_file, TRUE);BEGINLOOPl_amount:=UTL_TCP.read_text(l_conn,l_buffer, 32767 );DBMS_LOB.writeappend(l_data,l_amount,l_buffer);ENDLOOP ;EXCEPTIONWHEN UTL_TCP.END_OF_INPUT THENNULL ;WHENOTHERSTHENNULL ;END ;UTL_TCP.close_connection(l_conn);RETURN l_data;EXCEPTIONWHEN
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 库房标识化管理制度
- 弹性质工作管理制度
- 彩钢板工程管理制度
- 循环水防腐管理制度
- 德育分量化管理制度
- 快印店消防管理制度
- 快餐厅作息管理制度
- 总公司保密管理制度
- 恢复室苏醒管理制度
- 感官品评室管理制度
- DL-T+796-2012风力发电场安全规程
- 2024中考地理一轮复习专题1地球和地球仪(讲义)(原卷版)
- DL-T-1642-2016环形混凝土电杆用脚扣
- SF-36生活质量调查表(SF-36-含评分细则)
- 畜禽生产概论-形考任务3-国开(HB)-参考资料
- 人类普遍交往与世界历史的形成发展
- 2024年济源市六年级下学期调研语文试卷含答案
- 隐龙山墓园规划方案
- 矿灯管理工培训课件
- 村医培训死因监测课件
- 玻璃幕墙清洗施工方案
评论
0/150
提交评论