package com.cloudpower.util
import java.io.File
import java.io.FileInputStream
import java.io.FileOutputStream
import java.io.IOException
import sun.net.TelnetInputStream
import sun.net.TelnetOutputStream
import sun.net.ftp.FtpClient
/**
* Java自带的API对FTP的操作
* @Title:Ftp.java
*/
public class Ftp {
/**
* 本地文件名
*/
private String localfilename
/**
* 远程文件名
*/
private String remotefilename
/**
* FTP客户端
*/
private FtpClient ftpClient
/**
* 服务器连接
* @param ip 服务器IP
* @param port 服务器端口
* @param user 用户名
* @param password 密码
* @param path 服务器路径
* @date 2012-7-11
*/
public void connectServer(String ip, int port, String user,
String password, String path) {
try {
/* ******连接服务器的两种方法*******/
//第一种方法
//ftpClient = new FtpClient()
//ftpClient.openServer(ip, port)
//第二种方法
ftpClient = new FtpClient(ip)
ftpClient.login(user, password)
// 设置成2进制传输
ftpClient.binary()
System.out.println("login success!")
if (path.length() != 0){
//把远程系统上的目录切换到参数path所指定的目录
ftpClient.cd(path)
}
ftpClient.binary()
} catch (IOException ex) {
ex.printStackTrace()
throw new RuntimeException(ex)
}
}
public void closeConnect() {
try {
ftpClient.closeServer()
System.out.println("disconnect success")
} catch (IOException ex) {
System.out.println("not disconnect")
ex.printStackTrace()
throw new RuntimeException(ex)
}
}
public void upload(String localFile, String remoteFile) {
this.localfilename = localFile
this.remotefilename = remoteFile
TelnetOutputStream os = null
FileInputStream is = null
try {
//将远程文件加入输出流中
os = ftpClient.put(this.remotefilename)
//获取本地文件的输入流
File file_in = new File(this.localfilename)
is = new FileInputStream(file_in)
//创建一个缓冲区
byte[] bytes = new byte[1024]
int c
while ((c = is.read(bytes)) != -1) {
os.write(bytes, 0, c)
}
System.out.println("upload success")
} catch (IOException ex) {
System.out.println("not upload")
ex.printStackTrace()
throw new RuntimeException(ex)
} finally{
try {
if(is != null){
is.close()
}
} catch (IOException e) {
e.printStackTrace()
} finally {
try {
if(os != null){
os.close()
}
} catch (IOException e) {
e.printStackTrace()
}
}
}
}
public void download(String remoteFile, String localFile) {
TelnetInputStream is = null
FileOutputStream os = null
try {
//获取远程机器上的文件filename,借助TelnetInputStream把该文件传送到本地。
is = ftpClient.get(remoteFile)
File file_in = new File(localFile)
os = new FileOutputStream(file_in)
byte[] bytes = new byte[1024]
int c
while ((c = is.read(bytes)) != -1) {
os.write(bytes, 0, c)
}
System.out.println("download success")
} catch (IOException ex) {
System.out.println("not download")
ex.printStackTrace()
throw new RuntimeException(ex)
} finally{
try {
if(is != null){
is.close()
}
} catch (IOException e) {
e.printStackTrace()
} finally {
try {
if(os != null){
os.close()
}
} catch (IOException e) {
e.printStackTrace()
}
}
}
}
public static void main(String agrs[]) {
String filepath[] = { "/temp/aa.txt", "/temp/regist.log"}
String localfilepath[] = { "C:\\tmp\\1.txt","C:\\tmp\\2.log"}
Ftp fu = new Ftp()
/*
* 使用默认的端口号、用户名、密码以及根目录连接FTP服务器
*/
fu.connectServer("127.0.0.1", 22, "anonymous", "IEUser@", "/temp")
//下载
for (int i = 0i <filepath.lengthi++) {
fu.download(filepath[i], localfilepath[i])
}
String localfile = "E:\\号码.txt"
String remotefile = "/temp/哈哈.txt"
//上传
fu.upload(localfile, remotefile)
fu.closeConnect()
}
}
需要这样的一个包 jcifs-1.1.11public static void forcdt(String dir){
InputStream in = null
OutputStream out = null
File localFile = new File(dir)
try{
//创建file类 传入本地文件路径
//获得本地文件的名字
String fileName = localFile.getName()
//将本地文件的名字和远程目录的名字拼接在一起
//确保上传后的文件于本地文件名字相同
SmbFile remoteFile = new SmbFile("smb://administrator:admin@10.0.0.1/e$/aa/")
//创建读取缓冲流把本地的文件与程序连接在一起
in = new BufferedInputStream(new FileInputStream(localFile))
//创建一个写出缓冲流(注意jcifs-1.3.15.jar包 类名为Smb开头的类为控制远程共享计算机"io"包)
//将远程的文件路径传入SmbFileOutputStream中 并用 缓冲流套接
out = new BufferedOutputStream(new SmbFileOutputStream(remoteFile+"/"+fileName))
//创建中转字节数组
byte[] buffer = new byte[1024]
while(in.read(buffer)!=-1){//in对象的read方法返回-1为 文件以读取完毕
out.write(buffer)
buffer = new byte[1024]
}
}catch(Exception e){
e.printStackTrace()
}finally{
try{
//注意用完操作io对象的方法后关闭这些资源,走则 造成文件上传失败等问题。!
out.close()
in.close()
}catch(Exception e){
e.printStackTrace()}
}
}
方法1,imp是oracle提供的系统命令,在cmd下可以调用,故可以通过java.lang.Runtime包里的exec来实现。具体你去看看手册。这个方法的前提条件是必须服务器在cmd下能执行imp命令,如果是linux的服务器,也只要能执行同样调用。
方法2,通过sql语句实现。
就是自己实现备份,恢复。不使用oracle内部的命令。
原理就是检索出所有的对象,然后写入文件,这里要注意分批导出与分批导入(也就是多个文件),不然数据量大了,速速就很慢。
导出数据,存储过程,触发器,视图,权限等。这个就看你的需求了。。
然后在分析文件实现导入。。
3,自己编写系统程序,实现导入功能,仍然通过Runtime.exec来调用。
4,因为imp是系统命令,你用stmt来调用是不对的,这个stmt只能执行sql语句,是oracle来分析的,所以会报错不是有效的sql语句。
你换runtime.exec来执行,我想应该会成功的。。。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)