我试图解决你的问题,但我最终遇到了同样的情况,创建的文件仍然是空的。
然而,我想我找到了问题的原因。
下面是ganymed API的ch.ethz.ssh2.SFTPv3Client.write()方法的摘录
/**
* Write bytes to a file. If <code>len</code> > 32768, then the write operation will
* be split into multiple writes.
*
* @param handle a SFTPv3FileHandle handle.
* @param fileOffset offset (in bytes) in the file.
* @param src the source byte array.
* @param srcoff offset in the source byte array.
* @param len how many bytes to write.
* @throws IOException
*/
public void write(SFTPv3FileHandle handle, long fileOffset, byte[] src, int srcoff, int len) throws IOException
{
checkHandleValidAndOpen(handle);
if (len < 0)
while (len > 0)
{
你看,当你发送数据写入时,len是>;0,并且由于伪条件,该方法立即返回,并且它从未进入while循环(实际上是向文件中写入一些内容)。
我想之前在“if(len<;0)”后面有一个语句,但有人把它拿走了,给我们留下了一段无用的代码。。。
更新:
Go get the latest version (The example above was using build 210).
I had no problem with the build 250 and 251.
这是我的代码,它正在正确地写入ssh服务器上的一个新文件。
你需要防弹:)
public static void main(String[] args) throws Exception {
Connection conn = new Connection(hostname);
conn.connect();
boolean isAuthenticated = conn.authenticateWithPassword(username, password);
if (isAuthenticated == false)
throw new IOException("Authentication failed.");
SFTPv3Client client = new SFTPv3Client(conn);
File tmpFile = File.createTempFile("teststackoverflow", "dat");
FileWriter fw = new FileWriter(tmpFile);
fw.write("this is a test");
fw.flush();
fw.close();
SFTPv3FileHandle handle = client.createFile(tmpFile.getName());
FileInputStream fis = new FileInputStream(tmpFile);
byte[] buffer = new byte[1024];
int i=0;
long offset=0;
while ((i = fis.read(buffer)) != -1) {
client.write(handle,offset,buffer,0,i);
offset+= i;
}
client.closeFile(handle);
if (handle.isClosed()) System.out.println("closed");;
client.close();
}