接收来自FTP客户端的空日志文件,而连接到Azure的 - 因为日志是“使用”
问题描述:
问题是:接收来自FTP客户端的空日志文件,而连接到Azure的 - 因为日志是“使用”
FTPClient client = new FTPClient();
ofcourse我所有的连接细节在这里和比:
InputStream inputStream = client.retrieveFileStream(file.getName());
System.out.println(client.getReplyString());
输出:
550 The process cannot access the file because it is being used by
another process.
我怎样才能把这个日志文件?
下面是完整的代码:
public static void retrieveLogFilesFTP() {
try {
FTPClient client = new FTPClient();
for (int i = 0; i < components.length; i++) {
client.connect(ENV_PROD);
client.login([loginUserName], [loginPassword]);
client.enterLocalPassiveMode();
client.setFileType(FTP.BINARY_FILE_TYPE);
client.changeWorkingDirectory("/site/wwwroot");
FTPFile[] ftpFiles = client.listFiles();
if (ftpFiles != null && ftpFiles.length > 0) {
for (FTPFile file : ftpFiles) {
if (file.getName().startsWith("httpplatform")) {
File currentDirectory = new File(PATH + components[i]);
if (!currentDirectory.exists()) {
currentDirectory.mkdir();
}
OutputStream output = new FileOutputStream(currentDirectory + "/" + file.getName(), false);
client.retrieveFile(file.getName(), output);
System.out.println(client.getReplyString());
output.close()
}
}
}
client.logout();
client.disconnect();
changeLogFilesNames(new File(PATH + "/" + components[i] + "/"), components[i]);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
答
我能够使用retrieveFileStream()
从Azure中下载文件。你可以试试看。
...
InputStream inputStream = client.retrieveFileStream(file.getName());
OutputStream output = new FileOutputStream(currentDirectory + "/" + file.getName(), false);
//Using org.apache.commons.io.IOUtils
IOUtils.copy(inputStream, output);
IOUtils.closeQuietly(output);
IOUtils.closeQuietly(inputStream);
System.out.println(client.getReplyString())
...