java - printWorkingDirectory() 给出 null
问题描述
我在下面编写了一段代码,将 Excel 记录插入到数据库表中。Excel 文件在 ftp 服务器上。基本上我首先要更改目录 abd retrievig 文件流。
readExcel(String test, String filename) {
client.changeWorkingDirectory("/"+test);
is = client.retrieveFileStream(filename");
//do the processing
}
上面的代码一次运行良好。但现在我想循环使用上面的代码并上传多个文件。我这样做了,发现只有第一个文件得到了正确处理,第二个文件就卡在了上面的client.retrieveFileStream()
方法中。在我对循环中的第一个文件使用printWorkingDirectory()
之前和之后changeWorkingDirectory()
的方法之后,它给出了正确的目录之前和之后。但是第二次在循环中它给出了 null 时间和代码之前被卡住了。retrieveFileStream()
.
根据我的问题是因为changeWorkingDirectory()
被多次调用。
解决方案
我今天遇到了同样的问题:
循环client.retrieveFileStream()
一次打印了正确的工作目录,但第二次client.printWorkingDirectory()
只打印了null
。
就我而言,我只是将文件下载的类型从 更改client.retrieveFile()
为client.retrieveFileStream()
,之后需要client.completePendingCommand()
调用它。文档说:
如果不这样做,后续命令可能会出现意外行为。
更改您发布的代码,它看起来像这样:
readExcel(String test, String filename) {
client.changeWorkingDirectory("/"+test);
is = client.retrieveFileStream(filename");
//do the processing
if(client.completePendingCommand()) {
//File transfer successful
} else {
//File transfer failed
}
}
但现在我想循环使用上面的代码并上传多个文件。
我知道这个问题已经被回答了,所以这是给所有找到它的人的:
如果您想上传/下载多个文件(并且如果所有文件都应该进入/位于同一个文件夹中!)您应该只在一开始就更改工作目录,因为:
一旦您登录到服务器,它会将工作目录设置为根目录(例如\
)。如果您随后遍历文件并尝试每次更改目录,则会发生这种情况:
- 第一次循环迭代:它将切换到您想要的目录,例如
\subdir
. - 第二次循环迭代:当前目录仍然是
\subdir
,所以它会尝试切换到\subdir\subdir
,它可能存在也可能不存在。 - 第三次循环迭代:当前目录是
\subdir\subdir
,它会尝试切换到\subdir\subdir\subdir
.
一旦您注销并重新登录,工作目录将再次成为根目录(例如\
)。
推荐阅读
- pine-script - Pine Script 初学者问题与数组一起工作-> 从现有覆盖一些值中创建一个新的
- python - Python Web Scraping:输出到 csv
- keras - 从 onnx 到 keras 的转换时出现 onnx2keras 错误
- java - java支持注释的热交换吗?
- java - 在 Rest Assured 中获取 Get 请求时出现错误
- javafx - 如何在 ComboBox javaFX 中绑定和取消绑定 StringProperty?
- cuda - 为什么在 CUDA 中有一个 warp 级同步原语?
- flutter - 在颤动中显示透明对话框
- typescript - 查找两个日期的最小值/最大值(键入)
- vue.js - 登录后已登录状态恢复为 false 并且不允许我保护路由