Sample code for 30+ languages & platforms
Java

Detect End-of-File on a Remote SFTP File

See more SFTP Examples

Demonstrates the Chilkat SFtp.Eof method, which returns whether the most recent read for a handle received the SFTP end-of-file status. The only argument is the handle. This example reads until Eof is true.

Background: The timing here is worth understanding: reading exactly through the final byte does not immediately set EOF. The next read succeeds, returns zero bytes, sets the status to SSH_FX_EOF, and only then does Eof report true. That is why the loop tests Eof after each read rather than assuming a short read means the end — a short read can also just be the server returning less than requested.

Chilkat Java Downloads

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

public class ChilkatExample {

    public static void main(String[] args) {
        // Demonstrates the SFtp.Eof method, which returns whether the most recent read for a handle
        // received the SFTP end-of-file status.  The only argument is the handle.

        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;
        }

        // Read until Eof reports the end of the file.  Note that reading exactly through the final byte
        // does not set EOF; the next read returns zero bytes and then Eof becomes true.
        StringBuilder sbContent = new StringBuilder();
        int chunkSize = 4096;
        boolean reading = true;
        while (reading) {
            String chunk = sftp.readFileText(handle, chunkSize, "utf-8");
            if (sftp.lastReadFailed(handle)) {
                System.out.println(sftp.getLastErrorText());
                return;
            }

            sbContent.append(chunk);
            reading = !sftp.eof(handle);
        }

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

        System.out.println(sbContent.getAsString());

        sftp.disconnect();
    }
}