by Guest » 05 Feb 2025, 10:46
Leider gibt die Methode getExitstatus () immer -1 zurück, daher kann ich das nicht verwenden, um mir zu sagen, ob ein Upload eines Datei funktioniert oder nicht. Ich habe versucht, die GetInputStream () -Methode der Kanal Klasse zu verwenden, aber wenn ich versuchte, aus dem Eingabebetrieb zu lesen Obwohl die Isconnected und isclosed () falsch und wahr waren - was darauf hindeutet, dass der Kanal tatsächlich geschlossen war). Der folgende Code blockiert immer, nachdem ich versuche, ein Datenbyte aus dem Eingabestream zu lesen: < /p>
Code: Select all
public class Put {
public static void main(String[] args) throws IOException {
Session session = null;
Channel channel = null;
ChannelSftp channelSftp = null;
InputStream in = null;
JSch jsch = new JSch();
try {
jsch.setKnownHosts("known_hosts");
session = jsch.getSession("user", "host", 22);
session.setPassword("password");
session.connect();
channel = session.openChannel("sftp");
channel.setInputStream(null);
stdout = channel.getInputStream();
channel.connect();
channelSftp = (ChannelSftp)channel;
channelSftp.cd("/path/to/sftp");
channelSftp.put("/path/to/localfile", "/path/to/remotefile");
} catch (JSchException e) {
System.out.println(e.getMessage());
e.printStackTrace();
} catch (SftpException e) {
System.out.println(e.id);
System.out.println(e.getMessage());
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(channelSftp != null && channelSftp.isConnected())channelSftp.exit();
if(channel != null && channel.isConnected()) channel.disconnect();
if(session != null && session.isConnected()) session.disconnect();
}
System.out.println("Channel is connected? " + channel.isConnected()); // returns false as i would expect
System.out.println("Channel is closed? " + channel.isClosed()); // returns true as i would expect
System.out.println(stdout.available()); // returns 0
System.out.println(stdout.read()); // code blocks here
}
}
< /code>
Ich nehme an, meine Fragen sind: < /p>
[list]
[*] Warum ist mein Code mein Code Blockieren, wann immer ich versuche, aus dem Eingabestream zu lesen (obwohl der Kanal
tatsächlich geschlossen ist)
[*] Wie ist der Weg, um zu sagen, ob eine Datei hochladen funktioniert oder nicht. Ich denke, wenn eine sftpexception geworfen wird, die nicht erfolgreich ist, kann ich annehmen, dass es erfolgreich war?
[/list]
Leider gibt die Methode getExitstatus () immer -1 zurück, daher kann ich das nicht verwenden, um mir zu sagen, ob ein Upload eines Datei funktioniert oder nicht. Ich habe versucht, die GetInputStream () -Methode der Kanal Klasse zu verwenden, aber wenn ich versuchte, aus dem Eingabebetrieb zu lesen Obwohl die Isconnected und isclosed () falsch und wahr waren - was darauf hindeutet, dass der Kanal tatsächlich geschlossen war). Der folgende Code blockiert immer, nachdem ich versuche, ein Datenbyte aus dem Eingabestream zu lesen: < /p>
[code]public class Put {
public static void main(String[] args) throws IOException {
Session session = null;
Channel channel = null;
ChannelSftp channelSftp = null;
InputStream in = null;
JSch jsch = new JSch();
try {
jsch.setKnownHosts("known_hosts");
session = jsch.getSession("user", "host", 22);
session.setPassword("password");
session.connect();
channel = session.openChannel("sftp");
channel.setInputStream(null);
stdout = channel.getInputStream();
channel.connect();
channelSftp = (ChannelSftp)channel;
channelSftp.cd("/path/to/sftp");
channelSftp.put("/path/to/localfile", "/path/to/remotefile");
} catch (JSchException e) {
System.out.println(e.getMessage());
e.printStackTrace();
} catch (SftpException e) {
System.out.println(e.id);
System.out.println(e.getMessage());
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(channelSftp != null && channelSftp.isConnected())channelSftp.exit();
if(channel != null && channel.isConnected()) channel.disconnect();
if(session != null && session.isConnected()) session.disconnect();
}
System.out.println("Channel is connected? " + channel.isConnected()); // returns false as i would expect
System.out.println("Channel is closed? " + channel.isClosed()); // returns true as i would expect
System.out.println(stdout.available()); // returns 0
System.out.println(stdout.read()); // code blocks here
}
}
< /code>
Ich nehme an, meine Fragen sind: < /p>
[list]
[*] Warum ist mein Code mein Code Blockieren, wann immer ich versuche, aus dem Eingabestream zu lesen (obwohl der Kanal [/code] tatsächlich geschlossen ist)
[*] Wie ist der Weg, um zu sagen, ob eine Datei hochladen funktioniert oder nicht. Ich denke, wenn eine sftpexception geworfen wird, die nicht erfolgreich ist, kann ich annehmen, dass es erfolgreich war?
[/list]