2016-11-14 28 views
0

我试图构建一个小代码,我想创建一些字符串并将该字符串传输到位于以下位置的文件(应该在运行时创建)远程服务器。在我的情况下,远程服务器是Linux。如何将字符串写入位于远程服务器(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. 

对不起,如果你发现这个愚蠢的,但我是非常新的。

+1

你有什么在你lline'试过到目前为止//无法做任何超出this.'。有关文件传输,请看[ChannelSftp.html#put](https://epaul.github.io/jsch-documentation/javadoc/com/jcraft/jsch/ChannelSftp.html#put) – SubOptimal

回答

1

ChannelSftp具有put method版本,它接受远程系统上的文件名并返回OutputStream。写入OutputStream的任何内容都写入远程系统上的文件。您可以二进制数据写入到OutputStream,或者,如果你想写的文字将其转换为一个作家:

try (OutputStream out = channelSftp.put("/some/remote/file")) { 
    OutputStreamWriter writer = new OutputStreamWriter(out); 
    writer.write("some text"); 
} catch (IOException e) { 
    .... 
} 
+0

谢谢@Kenster .. this是非常有帮助的 –

0

@Kenster答案不适合我的工作(得到一个0字节的文件),所以我得到另一种解决方案:

String content = "some text"; 
InputStream stream = new ByteArrayInputStream (content.getBytes()); 
sftpChannel.put (stream, "/some/remote/file"); 

希望这会帮助别人......