From 44c50a9c4926370261ea4a643465f38cc5c16d6e Mon Sep 17 00:00:00 2001 From: Looly Date: Sat, 23 Dec 2023 19:13:12 +0800 Subject: [PATCH] add getFileStream --- .../dromara/hutool/extra/ftp/CommonsFtp.java | 17 ++++++----------- .../java/org/dromara/hutool/extra/ftp/Ftp.java | 3 +-- .../hutool/extra/ssh/engine/jsch/JschSftp.java | 8 +------- .../hutool/extra/ssh/engine/sshj/SshjSftp.java | 13 +++++++++++-- .../org/dromara/hutool/extra/ftp/FtpTest.java | 2 +- 5 files changed, 20 insertions(+), 23 deletions(-) diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/ftp/CommonsFtp.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/ftp/CommonsFtp.java index cb16046da..088a02be1 100644 --- a/hutool-extra/src/main/java/org/dromara/hutool/extra/ftp/CommonsFtp.java +++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/ftp/CommonsFtp.java @@ -56,6 +56,7 @@ public class CommonsFtp extends AbstractFtp { public static final int DEFAULT_PORT = 21; // region ----- of + /** * 构造CommonsFtp,匿名登录 * @@ -728,28 +729,22 @@ public class CommonsFtp extends AbstractFtp { } } - /** - * 读取FTP服务器上的文件为输入流 - * - * @param path 文件路径 - * @return {@link InputStream} - */ @Override - public InputStream read(String path) { + public InputStream getFileStream(final String path) { final String fileName = FileNameUtil.getName(path); final String dir = StrUtil.removeSuffix(path, fileName); - return read(dir, fileName); + return getFileStream(dir, fileName); } /** * 读取文件为输入流 * - * @param dir 服务端的文件目录 + * @param dir 服务端的文件目录 * @param fileName 服务端的文件名 * @return {@link InputStream} * @throws IORuntimeException IO异常 */ - public InputStream read(String dir, String fileName) throws IORuntimeException { + public InputStream getFileStream(final String dir, final String fileName) throws IORuntimeException { String pwd = null; if (isBackToPwd()) { pwd = pwd(); @@ -761,7 +756,7 @@ public class CommonsFtp extends AbstractFtp { try { client.setFileType(FTPClient.BINARY_FILE_TYPE); return client.retrieveFileStream(fileName); - } catch (IOException e) { + } catch (final IOException e) { throw new IORuntimeException(e); } finally { if (isBackToPwd()) { diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/ftp/Ftp.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/ftp/Ftp.java index 18fb1f3e5..08b8f4855 100644 --- a/hutool-extra/src/main/java/org/dromara/hutool/extra/ftp/Ftp.java +++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/ftp/Ftp.java @@ -2,7 +2,6 @@ package org.dromara.hutool.extra.ftp; import org.dromara.hutool.core.text.StrUtil; import org.dromara.hutool.core.util.CharsetUtil; -import org.rythmengine.utils.F; import java.io.Closeable; import java.io.File; @@ -161,5 +160,5 @@ public interface Ftp extends Closeable { * @param path 文件路径 * @return {@link InputStream} */ - InputStream read(String path); + InputStream getFileStream(String path); } diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/ssh/engine/jsch/JschSftp.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/ssh/engine/jsch/JschSftp.java index b8f3135fa..bb0ada80f 100644 --- a/hutool-extra/src/main/java/org/dromara/hutool/extra/ssh/engine/jsch/JschSftp.java +++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/ssh/engine/jsch/JschSftp.java @@ -633,14 +633,8 @@ public class JschSftp extends AbstractFtp { return this; } - /** - * 读取远程文件流 - * - * @param path 远程文件路径 - * @return 输入流 - */ @Override - public InputStream read(String path) { + public InputStream getFileStream(final String path) { try { return getClient().get(path); } catch (final SftpException e) { diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/ssh/engine/sshj/SshjSftp.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/ssh/engine/sshj/SshjSftp.java index 8040a8a07..6b2993df9 100644 --- a/hutool-extra/src/main/java/org/dromara/hutool/extra/ssh/engine/sshj/SshjSftp.java +++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/ssh/engine/sshj/SshjSftp.java @@ -14,10 +14,12 @@ package org.dromara.hutool.extra.ssh.engine.sshj; import net.schmizz.sshj.SSHClient; import net.schmizz.sshj.connection.channel.direct.Session; +import net.schmizz.sshj.sftp.RemoteFile; import net.schmizz.sshj.sftp.RemoteResourceInfo; import net.schmizz.sshj.sftp.SFTPClient; import net.schmizz.sshj.xfer.FileSystemFile; import org.dromara.hutool.core.collection.CollUtil; +import org.dromara.hutool.core.io.IORuntimeException; import org.dromara.hutool.core.io.IoUtil; import org.dromara.hutool.core.text.StrUtil; import org.dromara.hutool.extra.ftp.AbstractFtp; @@ -233,8 +235,15 @@ public class SshjSftp extends AbstractFtp { * @return {@link InputStream} */ @Override - public InputStream read(String path) { - throw new UnsupportedOperationException("sshjSftp不支持读取远程文件输入流!"); + public InputStream getFileStream(final String path) { + final RemoteFile remoteFile; + try { + remoteFile = sftp.open(path); + } catch (final IOException e) { + throw new IORuntimeException(e); + } + + return remoteFile.new ReadAheadRemoteFileInputStream(16); } @Override diff --git a/hutool-extra/src/test/java/org/dromara/hutool/extra/ftp/FtpTest.java b/hutool-extra/src/test/java/org/dromara/hutool/extra/ftp/FtpTest.java index f734a2d51..448db0f25 100644 --- a/hutool-extra/src/test/java/org/dromara/hutool/extra/ftp/FtpTest.java +++ b/hutool-extra/src/test/java/org/dromara/hutool/extra/ftp/FtpTest.java @@ -135,7 +135,7 @@ public class FtpTest { @Disabled public void readTest() throws Exception { try (final CommonsFtp ftp = CommonsFtp.of("localhost"); - final BufferedReader reader = new BufferedReader(new InputStreamReader(ftp.read("d://test/read/", "test.txt")))) { + final BufferedReader reader = new BufferedReader(new InputStreamReader(ftp.getFileStream("d://test/read/", "test.txt")))) { String line; while (StrUtil.isNotBlank(line = reader.readLine())) { Console.log(line);