Java 如何将SFTP中的FileObject保存为本地文件?

Java 如何将SFTP中的FileObject保存为本地文件?,java,xml,sftp,vfs,Java,Xml,Sftp,Vfs,我想编写一个java程序来测试一个接口,该接口通过SFTP上的xml文件进行通信。该接口的思想是一方上传一个xml文件,另一方处理它,删除它,然后上传另一个xml文件作为确认 我的程序应该做的是上传一个xml文件,等待它消失,等待响应,将其保存为本地文件,然后检查响应的正确性。我使用org.apache.commons.vfs2和FileObjects实现了这一点,并且可以成功地上传一个xml文件,等待它消失并检查确认文件的存在。但是一旦我尝试使用代码将文件解析为文档 FileObjec

我想编写一个java程序来测试一个接口,该接口通过SFTP上的xml文件进行通信。该接口的思想是一方上传一个xml文件,另一方处理它,删除它,然后上传另一个xml文件作为确认

我的程序应该做的是上传一个xml文件,等待它消失,等待响应,将其保存为本地文件,然后检查响应的正确性。我使用org.apache.commons.vfs2和FileObjects实现了这一点,并且可以成功地上传一个xml文件,等待它消失并检查确认文件的存在。但是一旦我尝试使用代码将文件解析为文档

    FileObject ackFileObject = VFS.getManager().resolveFile("sftp://user@sftp.server.com/SFTPfolder/file.xml");
    File ackFile = new File(ackFileObject.getName().getPath());
    DocumentBuilderFactory documentBuilderFactory = 
    DocumentBuilderFactory.newInstance();
    DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
    Document document = documentBuilder.parse(ackFile);
我得到一个FileNotFoundException,因为documentBuilder尝试从
“C:/SFTPfolder/”
读取文件,而不是从项目路径读取。另外,新文件(ackFileObject.getName().getPath());“不会创建新文件

有没有简单的解决办法?如何将从
VFS.getManager().resolveFile()
获取的
FileObject
保存为本地文件,以便将其解析为文档?

使用
copyFrom()
方法。您需要首先定义远程路径和本地路径:

您已经定义了远程文件:

    FileObject ackFileObject = VFS.getManager()
                   .resolveFile("sftp://user@sftp.server.com/SFTPfolder/file.xml");
现在定义要将远程路径复制到的路径:

    FileObject ackFileObjectLocal = VFS.getManager()
                  .resolveFile(localFilePath);
您必须在设置变量之前设置
localFilePath
,或者将其设置为常量

然后使用:
ackFileObjectLocal.copyFrom(ackFileObject,Selectors.SELECT_SELF)

因此,现在您已经下载了文件,可以使用file对象将其包装以继续处理