javaweb 怎么样将本地文件传输到远程服务器

javaweb 怎么样将本地文件传输到远程服务器,第1张

可以通过JDK自带的API实现,如下代码:

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.11

public 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来执行,我想应该会成功的。。。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/219661.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-06
下一篇2023-04-06

发表评论

登录后才能评论

评论列表(0条)

    保存