【发布时间】:2015-06-11 22:14:37
【问题描述】:
我在我们开发的一个 android 应用程序中使用 apache commons 库。这是遗留代码,出于某种原因,它没有写入设备。这发生在多个设备上,因此它不是特定于设备的。我们使用的是运行 Android 4.4 的 Nexus 7 设备。
该例程基本上是通过 FTP 传输到我们的服务器并查找要下载的新图像。 FTP到服务器成功,没有问题。
String listOfFiles = "GE_PT17_image.png,GE_PT18_image.png,GE_PT39_image.png";
String devicePathName = "/mnt/sdcard/company_name/DRMHH/"
status = ftpConnect(args[2], args[0], args[1], 21);
mFTPClient.changeWorkingDirectory(pathname);
FTPFile[] files = mFTPClient.listFiles();
我们基本上是查看服务器上目录中的所有图片,然后将它们与想要的图片进行匹配:
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
;
} else {
///mnt/sdcard/company_name/DRMHH/
if (listOfFiles.toUpperCase().contains(files[i].getName().toUpperCase())) {
File file = new File(devicePathName + File.separator + files[i].getName());
Log.d("FileName", devicePathName + File.separator + files[i].getName());
try {
FileOutputStream fos = new FileOutputStream(file); //NO ERROR or EXCEPTION
boolean weAreOK = mFTPClient.retrieveFile(files[i].getName(), fos); //returns true
fos.flush();
fos.close();
} catch (Exception e) {
Log.d("File Exception", e.toString());
}
}
}
}
在设备上找不到应该下载的文件。返回文件是否成功检索的变量返回 true。就像我说的,这是已经存在多年的遗留代码,直到现在都没有问题。有人有想法么?
【问题讨论】:
-
“在设备上找不到应该下载的文件”——您如何确定这一点?您没有使用
MediaScannerConnection和scanFile(),因此这些文件在一段时间内不会通过 USB 连接显示。如果您无法使用adb找到它们,请尝试在fos之后flush()和close()之前调用getFD().sync()。而且我不知道您从哪里获得args[4]的值,但如果这不是来自Context或Environment上的方法(例如,它是硬编码的),那也可能是麻烦的来源. -
我正在使用 USB 连接到设备。我从来不用等文件出现之前。
-
我编辑了 arg[4] 的值——我调试的时候是对的。
标签: android ftp apache-commons