在Java中,将文件从一个服务器复制到另一个服务器,你可以使用Secure Copy(SCP)进行操作。Java中的JSch
库可以进行此操作。
首先,需要添加JSch
库依赖到你的项目中。如果你使用的是Maven,可以添加以下依赖:
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.55</version>
</dependency>
以下是一个使用JSch
进行SCP操作的示例:
import com.jcraft.jsch.*;
public class Main {
public static void main(String[] args) {
String user = "username";
String host = "hostname";
String rfile = "/path/to/remote/file.txt";
String lfile = "/path/to/local/file.txt";
JSch jsch = new JSch();
Session session = jsch.getSession(user, host, 22);
UserInfo ui = new MyUserInfo("password");
session.setUserInfo(ui);
session.connect();
Channel channel = session.openChannel("exec");
((ChannelExec) channel).setCommand("scp -t " + rfile);
OutputStream out = channel.getOutputStream();
InputStream in = channel.getInputStream();
channel.connect();
byte[] buf = new byte[1024];
buf[0] = 0;
out.write(buf, 0, 1);
out.flush();
// 发送文件
File file = new File(lfile);
long filesize = file.length();
String command = "C0644 " + filesize + " ";
if (lfile.lastIndexOf('/') > 0){
command += lfile.substring(lfile.lastIndexOf('/')+1);
} else {
command += lfile;
}
command += "\n";
out.write(command.getBytes());
out.flush();
// 以流的形式进行读写
FileInputStream fis = new FileInputStream(file);
while (true) {
int len = fis.read(buf, 0, buf.length);
if (len <= 0) break;
out.write(buf, 0, len);
}
fis.close();
buf[0] = 0;
out.write(buf, 0, 1);
out.flush();
out.close();
channel.disconnect();
session.disconnect();
}
public static class MyUserInfo implements UserInfo {
private String password;
public MyUserInfo(String password) {
this.password = password;
}
@Override
public String getPassphrase() {
return null;
}
@Override
public String getPassword() {
return password;
}
@Override
public boolean promptPassword(String s) {
return true;
}
@Override
public boolean promptPassphrase(String s) {
return false;
}
@Override
public boolean promptYesNo(String s) {
return true;
}
@Override
public void showMessage(String s) {
System.out.println(s);
}
}
}
这段代码首先创建了一个用于SCP的连接,然后按照SCP的通信格式,发送了文件信息和文件内容。其中MyUserInfo
类用于处理连接时的身份验证。
你的要求中提到“附带中文注释”,这个需求可能需要你进一步明确。如果你指的是在源代码中添加中文注释,那么你可以在上面的代码中随意添加。如果你需要在传输的文件中添加注释,那么你需要先修改本地文件,然然后再进行文件的传输。这将取决于文件的类型和格式,如果是文本文件,你可以直接在文件中添加注释。
请注意,在使用上述代码时,需要将username
、hostname
、/path/to/remote/file.txt
和/path/to/local/file.txt
替换为你的实际情况。同时,MyUserInfo
类中的password
应替换为实际的用户密码。
另外,该段代码假设你的服务器使用的是22端口进行SSH连接,如果你的服务器使用的端口不是22,需要将代码中的22替换为你的实际端口。同时,代码中的"scp -t " + rfile是SCP的标准命令,用于将文件复制到服务器的指定路径,rfile
代表远程服务器上的文件路径。文章来源:https://www.toymoban.com/news/detail-535624.html
这段代码没有处理所有可能出现的异常,你可能需要根据需要添加适当的异常处理代码。同时,由于网络传输可能会较慢,你可能需要在实际应用中添加超时处理的逻辑。文章来源地址https://www.toymoban.com/news/detail-535624.html
到了这里,关于Java中将本服务器的文件拷贝到另一个服务器(Linux to Linux)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!