如何将字符串写入位于远程服务器(linux)的文件中

Sac*_*Dev 2 java jsch

我试图构建一个小代码,在其中创建一些字符串并将该字符串传输到位于远程服务器中的文件(应在运行时创建)。就我而言,远程服务器是 Linux。

有人可以帮我吗?我正在使用 JSCH 和 ChannelSftp 但无法执行此操作。下面是我的代码:

JSch jsch = new JSch();
session = jsch.getSession(SFTPUSER, MachineIP, SFTPPORT);
String str = "Hello";
session.setPassword(SFTPPASS);
System.out.println(SFTPPASS);
java.util.Properties config = new java.util.Properties();

System.out.println("Config done");
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
System.out.println("Config set");

session.connect();
System.out.println("Session connected");
channel = session.openChannel("sftp");
channel.connect();

System.out.println("Connection Opened\n");
channelSftp = (ChannelSftp) channel;
channelSftp.cd(SFTPWORKINGDIR);
File f=new File("Test.txt");
//unable to do anything beyond this.
Run Code Online (Sandbox Code Playgroud)

抱歉,如果您觉得这很愚蠢,但我对此很陌生。

Ken*_*ter 5

ChannelSftp有put 方法的版本,它接受远程系统上的文件名并返回OutputStream。写入 OutputStream 的任何内容都会写入远程系统上的文件。您可以将二进制数据写入 OutputStream,或者如果您想向其中写入文本,则将其转换为 Writer:

try (OutputStream out = channelSftp.put("/some/remote/file")) {
    OutputStreamWriter writer = new OutputStreamWriter(out);
    writer.write("some text");
} catch (IOException e) {
    ....
}
Run Code Online (Sandbox Code Playgroud)

  • 你需要在 `writer.write("some text");` 之后使用 `writer.flush();`,否则你可能会得到一个空文件 (3认同)