SFTP的一个小例子(备忘用法)



import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.ConnectionMonitor;
import ch.ethz.ssh2.SFTPv3Client;
import ch.ethz.ssh2.SFTPv3DirectoryEntry;
import ch.ethz.ssh2.SFTPv3FileHandle;

Connection conn = new Connection(sshHostname);
			conn.addConnectionMonitor(new ConnectionMonitor() {
				public void connectionLost(Throwable reason) {
					reason.getStackTrace();
					throw new RuntimeException(reason);
				}
			});
			conn.connect();
			
			File keyfile = new File(privKeyPath);
			boolean isAuthenticated = conn.authenticateWithPublicKey(sshUsername, keyfile, sshPassword);
			if (isAuthenticated == false) {
				throw new IOException("Connect SSH Authentication failed.");
			}
			log.info("Connecting to " + sshHostname + "successful !");

			SFTPv3Client client = new SFTPv3Client(conn);
			client.setCharset("GBK");
			Vector<SFTPv3DirectoryEntry> fileList = client.ls(sourceFile);
			if (fileList.size() == 0) {
				log.info("No file existed in the sourceFolder ["+sourceFile+"]");
				return;
			}

			for (SFTPv3DirectoryEntry entry : fileList) {
				log.debug("Capture the file "+entry.filename+" in the sourceFolder ["+"]");
				if (".".equals(entry.filename) || "..".equals(entry.filename)) {
					continue;
				}
				if (!entry.filename.startsWith("atcc")) {
					continue;
				}
				CaptureDataTrack captureDataTrack = captureDataTrackService.captureChecker(entry.filename);
				if (captureDataTrack != null) {
					continue;
				}
				log.info(entry.filename + " " + entry.longEntry);
				SFTPv3FileHandle fileHandle = client.openFileRO(sourceFile + entry.filename);

				File myFile = new File(targetFile + entry.filename);
				OutputStream out = new FileOutputStream(myFile);

				long numread = 0;
				int length = 0;
				Long len = entry.attributes.size;
				int readSize = len.compareTo(Long.valueOf(loadSize)) > 0 ? loadSize : len.intValue();
				byte[] bytes = new byte[readSize];
				while (readSize > 0 && (numread = client.read(fileHandle, length, bytes, 0, readSize)) != -1) {
					length += numread;
					out.write(bytes);
					readSize = len.compareTo(Long.valueOf(length + loadSize)) > 0 ? loadSize : (int) (len - length);
					bytes = new byte[readSize];
				}

				out.close();

你可能感兴趣的:(ssh)