如何将 SFTP 中的 FileObject 保存为本地文件?
How to save a FileObject from SFTP as local file?
我想编写一个 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/"
读取文件,而不是从项目路径读取文件。 "new File(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 对象包装它以继续处理。
我想编写一个 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/"
读取文件,而不是从项目路径读取文件。 "new File(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 对象包装它以继续处理。