将文件从一台服务器复制到另一台
Easist如果你能使用apache commons-io:在FileUtils
类有方便的方法来复制文件:
FileUtils.copyFileToDirectory(srcFile, targetDirectory);
(如你谈到文本文件我想,你的应用程序同时访问文件系统)
要求服务器A有一个本地安装的服务器B的目录? – aioobe 2010-09-28 12:38:08
这样猜测。这个问题有点含糊 - 通常你有一个给定的接口(文件系统,FTP,Web服务,...),寻找帮助来实现/使用给定的编程语言(这里:Java)... – 2010-09-28 12:47:40
好的答案( +1) – 2010-09-28 13:13:43
如果您需要从可访问文件系统复制文件,请使用Andreas' answer。
如果您想要一个从下面的协议摘要的一般方法,请看Apache Commons VFS。它通过a number of protocols的可用资源的通用API:
- FTP
- 本地文件
- HTTP和HTTPS
- SFTP
- 临时文件
- 邮编,罐和焦油(未压缩的,TGZ或tbz2)
- gzip and bzip2
- res
- RAM
- 哑剧
几乎所有的Linux机器将其默认运行SSH服务器。因此,SCP将是您在它们之间复制文件的最佳选择。
使用像JSCH这样的SSH库来做到这一点。你会发现一个使用JSCH here进行SCP传输的教程。
如果你使用FTP,你可以使用Apache commons/net的FTPClient。
这里是供您参考示例代码:
FTPClient client = new FTPClient();
client.connect(host);
if(FTPReply.isPositiveCompletion(client.getReplyCode())) {
if(client.login(username, password)) {
FileInputStream fis = new FileInputStream(localFilepath);
try {
if(client.storeFile(remoteFilename, fis)) {
System.out.println("File uploaded!");
}
}
finally {
fis.close();
}
}
}
如果你想要一个简单的方法,你的服务器支持PHP,我建议Rapid Transfer Script。
只需将脚本上传到要复制文件的目录,输入要复制的文件的URL并点击转移。它在2分钟内复制了一个1.4GB的文件,为我节省了大量的时间和带宽。
我已经使用commons net FTP将文件从一台服务器传输到另一台服务器。
Maven的相关性:
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.3</version>
</dependency>
的Java:
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
public void tranferFile() {
FTPClient ftpClient = new FTPClient();
try {
ftpClient.connect(servername, port);
ftpClient.login(username, password);
ftpClient.enterLocalPassiveMode();
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
File sourceFile = new File("file which you want to send");
InputStream inputStream = new FileInputStream(sourceFile);
boolean done = ftpClient.storeFile("filename which receiver get", inputStream);
inputStream.close();
if (done) {
LOGGER.info("file is uploaded successfully..............");
}
} catch (IOException e) {
LOGGER.error("Exception occured while ftp : "+e);
} finally {
try {
if (ftpClient.isConnected()) {
ftpClient.logout();
ftpClient.disconnect();
}
} catch (IOException e) {
LOGGER.error("Exception occured while ftp logout/disconnect : "+e);
}
}
}
类型的服务器? ,服务器B可以使用HTTP访问服务器A的文件吗? – 2010-09-28 12:34:28
你可以使用FTP吗?你的服务器在同一个网络上吗?你在使用共享文件系统吗?你可以部署一个Servlet吗?我认为我们需要更多的背景来回答。 – 2010-09-28 12:34:30
你可以使用[scp](http://www.go2linux.org/scp-linux-command-line-copy-files-over-ssh),但是我想你自己实现之后,不是吗? – Patrick 2010-09-28 12:52:33