Java 使用Jsch将带有目录的文件传输到SFTP服务器
我正在尝试将文件从本地计算机移动到远程服务器。但是我不能用JSCHAPI来实现它Java 使用Jsch将带有目录的文件传输到SFTP服务器,java,io,jsch,Java,Io,Jsch,我正在尝试将文件从本地计算机移动到远程服务器。但是我不能用JSCHAPI来实现它 for (File f : fileList) { channelSftp.put(new FileInputStream(f), "/ROOT/File/"+f.getName()); } 我正在循环我的本地机器目录/Home/File/file1.txt、file2、txt file3.txt等等,并将其保存到fileList 我需要将这些文件传输到SFTP服务器中的不同目录。 说/ROOT/File
for (File f : fileList) {
channelSftp.put(new FileInputStream(f), "/ROOT/File/"+f.getName());
}
我正在循环我的本地机器目录/Home/File/file1.txt、file2、txt file3.txt等等,并将其保存到fileList
我需要将这些文件传输到SFTP服务器中的不同目录。
说/ROOT/File/file1.txt,file2,txt file3.txt
我不知道如何将/Home更改为/ROOT文件路径名。而且我还需要复制所有文件而不使用sftpChannel.mkdir(文件夹);在JSch中[逐个创建文件夹]。“在这里,我不知道如何将/Home更改为/ROOT文件路径名。而且我需要复制所有文件,而不使用sftpChannel.mkdir(文件夹);[逐个创建文件夹]。-我不清楚这一点。您不想在代码中使用mkdir并且目录已经存在?PFB示例代码。您可以在执行代码之前在服务器中创建根目录。这将循环本地目录中的文件并将其传输到SFTP服务器
public static void main (String args[]) throws FileNotFoundException, IOException
{
try {
JSch jsch = new JSch();
Session session = jsch.getSession("sftpuser", "sftphost");
session.setPassword("sftppassword");
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
config.put("PreferredAuthentications",
"publickey,keyboard-interactive,password");
session.setConfig(config);
session.connect();
Channel channel = session.openChannel("sftp");
channel.connect();
System.out.println("sftp channel opened and connected.");
ChannelSftp channelSftp = (ChannelSftp) channel;
String sftpDirectory = "/target/Rootlocation";
File directory = new File("C:\\Windows\\HomeLocation");
File[] fList = directory.listFiles();
for (File file : fList){
if (file.isFile()){
String filename=file.getAbsolutePath();
channelSftp.put(filename, sftpDirectory, ChannelSftp.OVERWRITE);
System.out.println(filename + " transferred to " + sftpDirectory );
}
}
}
catch (JSchException e) {
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("Transfer Process Completed...");
}
}
“在这里,我不知道如何将/Home更改为/ROOT文件路径名。我还需要复制所有文件,而不使用JSch中的sftpChannel.mkdir(folder);[create folder one by one by one]。您不想在代码中使用mkdir并且目录已经存在?PFB示例代码。您可以在执行代码之前在服务器中创建根目录。这将循环本地目录中的文件并将其传输到SFTP服务器
public static void main (String args[]) throws FileNotFoundException, IOException
{
try {
JSch jsch = new JSch();
Session session = jsch.getSession("sftpuser", "sftphost");
session.setPassword("sftppassword");
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
config.put("PreferredAuthentications",
"publickey,keyboard-interactive,password");
session.setConfig(config);
session.connect();
Channel channel = session.openChannel("sftp");
channel.connect();
System.out.println("sftp channel opened and connected.");
ChannelSftp channelSftp = (ChannelSftp) channel;
String sftpDirectory = "/target/Rootlocation";
File directory = new File("C:\\Windows\\HomeLocation");
File[] fList = directory.listFiles();
for (File file : fList){
if (file.isFile()){
String filename=file.getAbsolutePath();
channelSftp.put(filename, sftpDirectory, ChannelSftp.OVERWRITE);
System.out.println(filename + " transferred to " + sftpDirectory );
}
}
}
catch (JSchException e) {
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("Transfer Process Completed...");
}
}
如果要根据本地计算机中的目录名称在远程服务器中自动创建目录,请使用PFB示例代码。这将递归检查本地目录C:\user\Home中的所有文件,并将它们以相同的文件夹结构移动到linux服务器中的/ROOT/目录。。(例如:如果folder1、folder2与C:\user\Home中的文件一起存在,则将在sftp服务器的/Root/目录中创建相同的文件夹名称)如果文件已存在于sftp服务器中,则这也将覆盖该文件
public static void main (String args[]) throws FileNotFoundException, IOException, ParseException
{
try {
JSch jsch = new JSch();
Session session = jsch.getSession("sftpuser", "sftphost");
session.setPassword("sftppassword");
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
config.put("PreferredAuthentications",
"publickey,keyboard-interactive,password");
session.setConfig(config);
session.connect();
Channel channel = session.openChannel("sftp");
channel.connect();
channelSftp = (ChannelSftp) channel;
System.out.println("sftp channel opened and connected.");
sftpDirectory = "/ROOT/";
NewDir=sftpDirectory;
listf("C:\\user\\Home");
}
catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("Transfer Process Completed...");
}
public static List<File> listf(String directoryName) throws JSchException, SftpException {
File directory = new File(directoryName);
List<File> resultList = new ArrayList<File>();
File[] fList = directory.listFiles();
resultList.addAll(Arrays.asList(fList));
for (File file : fList) {
if (file.isFile()) {
String filename=file.getAbsolutePath();
channelSftp.put(filename, NewDir, ChannelSftp.OVERWRITE);
System.out.println(filename + " transferred to " + sftpDirectory );
} else if (file.isDirectory()) {
System.out.println(file.getAbsolutePath());
NewDir = sftpDirectory+file.getName();
channelSftp.mkdir(NewDir);
System.out.println(NewDir + " Folder created ");
resultList.addAll(listf(file.getAbsolutePath()));
}
}
System.out.println(fList);
return resultList;
}
publicstaticvoidmain(字符串args[])抛出FileNotFoundException、IOException、ParseException
{
试一试{
JSch JSch=新的JSch();
Session Session=jsch.getSession(“sftpuser”、“sftpost”);
session.setPassword(“sftpassword”);
java.util.Properties config=new java.util.Properties();
配置放置(“检查”、“否”);
config.put(“PreferredAuthentications”,
“公钥、键盘交互、密码”);
session.setConfig(config);
session.connect();
Channel=session.openChannel(“sftp”);
channel.connect();
channelSftp=(channelSftp)信道;
System.out.println(“sftp通道已打开并连接”);
sftpDirectory=“/ROOT/”;
NewDir=sftpDirectory;
列表(“C:\\user\\Home”);
}
捕获(例外e){
e、 printStackTrace();
}最后{
System.out.println(“传输过程已完成…”);
}
公共静态列表listf(stringdirectoryname)抛出JSchException、SftpException{
文件目录=新文件(目录名);
List resultList=new ArrayList();
File[]fList=directory.listFiles();
addAll(Arrays.asList(fList));
for(文件:fList){
if(file.isFile()){
字符串文件名=file.getAbsolutePath();
channelSftp.put(文件名,NewDir,channelSftp.OVERWRITE);
System.out.println(文件名+“转移到”+sftpDirectory);
}else if(file.isDirectory()){
System.out.println(file.getAbsolutePath());
NewDir=sftpDirectory+file.getName();
channelSftp.mkdir(NewDir);
System.out.println(NewDir+“已创建文件夹”);
addAll(listf(file.getAbsolutePath());
}
}
System.out.println(fList);
返回结果列表;
}
如果要根据本地计算机中的目录名在远程服务器中自动创建目录,请使用PFB示例代码。这将递归检查本地目录C:\user\Home中的所有文件,并将它们以相同的文件夹结构移动到linux服务器中的/ROOT/目录中。。(例如:如果folder1、folder2与C:\user\Home中的文件一起存在,则将在sftp服务器的/Root/目录中创建相同的文件夹名称)如果文件已存在于sftp服务器中,则这也将覆盖该文件
public static void main (String args[]) throws FileNotFoundException, IOException, ParseException
{
try {
JSch jsch = new JSch();
Session session = jsch.getSession("sftpuser", "sftphost");
session.setPassword("sftppassword");
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
config.put("PreferredAuthentications",
"publickey,keyboard-interactive,password");
session.setConfig(config);
session.connect();
Channel channel = session.openChannel("sftp");
channel.connect();
channelSftp = (ChannelSftp) channel;
System.out.println("sftp channel opened and connected.");
sftpDirectory = "/ROOT/";
NewDir=sftpDirectory;
listf("C:\\user\\Home");
}
catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("Transfer Process Completed...");
}
public static List<File> listf(String directoryName) throws JSchException, SftpException {
File directory = new File(directoryName);
List<File> resultList = new ArrayList<File>();
File[] fList = directory.listFiles();
resultList.addAll(Arrays.asList(fList));
for (File file : fList) {
if (file.isFile()) {
String filename=file.getAbsolutePath();
channelSftp.put(filename, NewDir, ChannelSftp.OVERWRITE);
System.out.println(filename + " transferred to " + sftpDirectory );
} else if (file.isDirectory()) {
System.out.println(file.getAbsolutePath());
NewDir = sftpDirectory+file.getName();
channelSftp.mkdir(NewDir);
System.out.println(NewDir + " Folder created ");
resultList.addAll(listf(file.getAbsolutePath()));
}
}
System.out.println(fList);
return resultList;
}
publicstaticvoidmain(字符串args[])抛出FileNotFoundException、IOException、ParseException
{
试一试{
JSch JSch=新的JSch();
Session Session=jsch.getSession(“sftpuser”、“sftpost”);
session.setPassword(“sftpassword”);
java.util.Properties config=new java.util.Properties();
配置放置(“检查”、“否”);
config.put(“PreferredAuthentications”,
“公钥、键盘交互、密码”);
session.setConfig(config);
session.connect();
Channel=session.openChannel(“sftp”);
channel.connect();
channelSftp=(channelSftp)信道;
System.out.println(“sftp通道已打开并连接”);
sftpDirectory=“/ROOT/”;
NewDir=sftpDirectory;
列表(“C:\\user\\Home”);
}
捕获(例外e){
e、 printStackTrace();
}最后{
System.out.println(“传输过程已完成…”);
}
公共静态列表listf(stringdirectoryname)抛出JSchException、SftpException{
文件目录=新文件(目录名);
List resultList=new ArrayList();
File[]fList=directory.listFiles();
addAll(Arrays.asList(fList));
for(文件:fList){
if(file.isFile()){
字符串文件名=file.getAbsolutePath();
channelSftp.put(文件名,NewDir,channelSftp.OVERWRITE);
System.out.println(文件名+“转移到”+sftpDirectory);
}else if(file.isDirec
ChannelExec channelExec = (ChannelExec) session.openChannel("exec");
channelExec.setCommand("unzip /ROOT/File.zip");
channelExec.setCommand("rm /ROOT/File.zip");