使用 JSCH 的 SFTP 中的未知位置

Unknown location in SFTP using JSCH

我在使用 ind Oracle Data Integrator 时遇到短脚本 JSCH 的问题。 我想将文件从目录发送到服务器 SFTP。 我的代码:

import com.jcraft.jsch.*;

JSch ssh = new JSch();
Session session = ssh.getSession("pas", "host", 22);

session.setConfig("StrictHostKeyChecking", "no");
session.setConfig(
        "PreferredAuthentications", 
        "publickey,keyboard-interactive,password");
session.setPassword("pass");

session.connect();
Channel channel = session.openChannel("sftp");
channel.connect();

ChannelSftp sftp = (ChannelSftp) channel;

sftp.put("C:\Tools\tmp.html", "/var/temp/temp.html");

channel.disconnect();
session.disconnect();

我收到错误:

ODI-1590: The execution of the script failed. 
Caused By: org.apache.bsf.BSFException: BeanShell script error: Sourced file:
inline evaluation of: ``
import oracle.odi.km.exception.OdiKMException;
import com.jcraft.jsch.*;
J . . . '' Token Parsing Error: Lexical error at line 23, column 19. 
Encountered: "W" (87), after : "\"C:\": <at unknown location>
BSF info: upload file at line: 0 column: columnNo

我做错了什么?

您必须转义本地路径中的反斜杠 String:

sftp.put("C:\Tools\tmp.html", "/var/temp/temp.html");

这是因为反斜杠本身会转义下一个字符,如果您在 "C:\Tools\tmp.html" 中放置单个反斜杠,结果将是(但不是)类似 "C:oolsmp.html" 的东西,这不太可能被认为是有效路径。

在我的 IDE (eclipse) 中,带有单个反斜杠的 String 被认为是编译错误,代码甚至无法编译。

错误是这样的:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    Invalid escape sequence (valid ones are  \b  \t  \n  \f  \r  \"  \'  \ )