Sample code for 30+ languages & platforms
Java

Check Whether the Last SFTP Read Failed

See more SFTP Examples

Demonstrates the Chilkat SFtp.LastReadFailed method, which returns whether the most recent read for a handle failed. The only argument is the handle. A normal end-of-file is not a failure.

Background: A chunked read loop needs to tell three outcomes apart: more data, a clean end-of-file, and an actual error such as a dropped connection or a revoked handle. LastReadFailed isolates the error case — it is false on a normal EOF read (which succeeds with zero bytes) and true for an empty, malformed, or already-closed handle — so the loop can stop cleanly on EOF but bail out with an error message on a genuine failure.

Chilkat Java Downloads

Chilkat2 Java
import com.chilkatsoft.chilkat2.BinData;
import com.chilkatsoft.chilkat2.ChilkatException;
import com.chilkatsoft.chilkat2.SFtp;

public class ChilkatExample {

    public static void main(String[] args) {
        // Demonstrates the SFtp.LastReadFailed method, which returns whether the most recent read for a
        // handle failed.  The only argument is the handle.  A normal end-of-file is NOT a failure.

        SFtp sftp = new SFtp();

        // Connect, authenticate, and initialize the SFTP subsystem.
        int port = 22;
        try {
            sftp.connect("sftp.example.com", port);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        // Normally you would not hard-code the password in source.  You should instead obtain it
        // from an interactive prompt, environment variable, or a secrets vault.
        String password = "mySshPassword";

        String handle;
        try {
            sftp.authenticatePw("mySshLogin", password);

            sftp.initializeSftp();

            handle = sftp.openFile("subdir/data.txt", "readOnly", "openExisting");
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        boolean reading = true;
        int chunkSize = 4096;
        BinData bd = new BinData();
        while (reading) {
            sftp.readFileBd(handle, chunkSize, bd);

            // Distinguish an actual read failure from a normal EOF.  On EOF the read succeeds, returns
            // zero bytes, and LastReadFailed is false.
            if (sftp.lastReadFailed(handle)) {
                System.out.println("Read failed: " + sftp.getLastErrorText());
                return;
            }

            reading = !sftp.eof(handle);
        }

        try {
            sftp.closeHandle(handle);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        System.out.println("Read " + bd.getNumBytes() + " bytes with no read failures.");

        sftp.disconnect();
    }
}