首页 > 编程语言 >java实现scp功能实现目录下所有文件拷贝至指定服务器

java实现scp功能实现目录下所有文件拷贝至指定服务器

时间:2024-02-26 09:04:30浏览次数:38  
标签:java String File session sftpClient file localFolderPath 拷贝 scp

1、添加pom依赖

<dependency>
  <groupId>com.jcraft</groupId>
  <artifactId>jsch</artifactId>
  <version>0.1.55</version>
</dependency>

2、示例代码

public static void main(String[] args) throws IOException {
try {
// 初始化JSch对象
JSch jsch = new JSch();
// 创建一个会话,设置用户名、主机IP和端口(默认22)
Session session = jsch.getSession("用户名", "ip", 22);
// 设置密码(也可以使用key-based authentication)
session.setPassword("密码");
// 设置第一次登陆时提示,可选值:(ask | yes | no)
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
// 建立连接
session.connect();
// 创建一个SFTP通道
Channel channel = session.openChannel("sftp");
channel.connect();
// 获取SFTP客户端
ChannelSftp sftpClient = (ChannelSftp) channel;
// 准备本地文件夹路径与远程目标路径
String localFolderPath = "E:/目录/";
String remoteDirPath = "/data/transfer/";
File localFolder = new File(localFolderPath);
if (localFolder.isDirectory()) {
uploadFolder(sftpClient, localFolderPath, remoteDirPath);
} else {
System.out.println(localFolderPath + " is not a directory.");
}
// 关闭资源
sftpClient.quit();
session.disconnect();

} catch (JSchException | SftpException | FileNotFoundException e) {
e.printStackTrace();
}
}

private static void uploadFolder(ChannelSftp sftpClient, String localFolderPath, String remoteDirPath) throws SftpException, IOException {
File localFolder = new File(localFolderPath);
File[] files = localFolder.listFiles();
if (files != null) {
for (File file : files) {
if (file.isDirectory()) {
// 如果是目录,则在远程服务器上创建对应目录并递归上传
String newRemoteDirPath = remoteDirPath + file.getName() + "/";
sftpClient.mkdir(newRemoteDirPath);
uploadFolder(sftpClient, file.getAbsolutePath(), newRemoteDirPath);
} else {
// 如果是文件,则上传到远程服务器
String localFilePath = file.getAbsolutePath();
String remoteFilePath = remoteDirPath + file.getName();
FileInputStream fis = new FileInputStream(file);
sftpClient.put(fis, remoteFilePath);
fis.close();
}
}
}
}

标签:java,String,File,session,sftpClient,file,localFolderPath,拷贝,scp
From: https://www.cnblogs.com/myself1012/p/18033504

相关文章

  • Java中的数组-暂未完结
    数组的定义数组是相同类型数据的有序集合数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。◆其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们。数组声明创建◆首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的......
  • Java HashMap merge() 方法
    在3020.子集中元素的最大数量【力扣周赛382】用哈希表统计元素个数使用点击查看代码classSolution{publicintmaximumLength(int[]nums){Map<Long,Integer>cnt=newHashMap<>();for(intx:nums){cnt.merge((long)x,1,In......
  • java中的基础方法使用
    何谓方法?◆System.out.printIn(),那么它是什么呢?◆Java方法是语句的集合,它们在一起执行一个功能。◆方法是解决一类问题的步骤的有序组合◆方法包含于类或对象中◆方法在程序中被创建,在其他地方被引用设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块的集合。我......
  • Java基础12:JavaDoc生成文档
    JavaDoc1.javadoc命令是用来生成自己API文档的2.参数信息2.1@author作者名2.2@version版本号2.3@since指明需要最早使用的jdk版本2.4@param参数名2.5@return返回值情况2.6@throws异常抛出情况 ......
  • FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memo
    <---JSstacktrace--->====JSstacktrace=========================================Securitycontext:000000A526FA5891<JSObject>1:fromString(akafromString)[buffer.js:314][bytecode=0000010AE305A149offset=164](this=00000347695822D1&......
  • Java基础11:包机制
    1.包机制:1.1为了更好地组织类,Java提供了包机制,用于区别类名的命名空间1.2包语句的语法格式为:1.3一般利用公司域名倒置最为包名;1.4为了能够使用某一个包的成员,我们需要在Java程序中明确导入该包。使用`import`语句可以完成此功能 创建一个包......
  • Java的IO流
    夯实基础的第三篇:IO流1、流的概念流就是一连串的连续动态数据的集合,在Java的IO流中我们可以将其看做一个管道,将其包含输入输出流,Sourcet通过输入流将数据信息传给程序,而程序又通过输出流将数据信息传给目的地。就类似于我们从外部将东西传给程序就要输入流,我们从程序传给外部就......
  • DVWA-Javascript
    Javascript漏洞指的是通过某种方式绕过前端的javascript逻辑进行服务器访问。 --low级别:服务器端代码:提交token无效的结果如下:因为这里要求是在文本框中提交success内容,并且获取到最新token信息,才能提交成功。因此,先在文本框中输入success,然后再console控制台中,手动调用g......
  • Java学习笔记(1)
    常用DOS指令helloworld勾选文件扩展名创建.txt文件去掉.class后缀,运行java的执行原理组成跨平台使用IDEA创建项目之后直接编写代码使用Scanner接收输入数组静态初始化形式要注意数组的访问代码演示:publicclassMain{publicstaticvoidmain(......
  • Jakarta与javax的替换
    从JDK11开始,JavaSE平台开始逐步淘汰javax.*包,并逐渐将其替换为jakarta.*包。这是因为JavaEE从Oracle转移到了Eclipse基金会,并改名为JakartaEE,因此相关的API也相应地进行了迁移和重命名。这一变化对Java开发者的影响主要体现在以下几个方面:1.包名替换:在J......