该方案是从ftp服务器获取文件并在电子邮件中作为附件发送。 我想使用“org.apache.commons.net.ftp.FTPClient”从FTP服务器获取文件 关于连接,文件名成功。但我不知道如何正确转换为文件。
这是我的代码:
FTPClient ftp = new FTPClient();
byte bytes[]=new byte[1024];
int read = 0;
//connection,filename --success
StringBuffer str = new StringBuffer("MyFiles");
str.append("-XYZ-");
str.append(new SimpleDateFormat("ddMMyyyy").format(new Date()));
str.append(".pdf");
System.out.println("getting file --> "+str.toString());
System.out.println("getting stream ftp -->"+ ftp.retrieveFileStream(str.toString()));
InputStream input = ftp.retrieveFileStream(str.toString());
ByteArrayOutputStream out = new ByteArrayOutputStream();
while ((read = input.read(bytes)) != -1) { --> null pointer line 503
out.write(bytes,0,read);
}
File temp = null;
temp = new File(str.toString());
Utils.convertByteArrayToFile(temp, out.toByteArray());
public static void convertByteArrayToFile(File outputFile, byte[] inputArray) throws IOException{
BufferedOutputStream bos=null;
try{
FileOutputStream fos=new FileOutputStream(outputFile);
bos=new BufferedOutputStream(fos);
bos.write(inputArray);
}finally{
if(bos!=null){
try{
bos.flush();
bos.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
}
结果是..
获取文件 - > MYFILES-XYZ-17012013.pdf
获取流ftp - > org.apache.commons.net.io.SocketInputStream@409db838
显示java.lang.NullPointerException 在com.java.EmailForm.sendEmail(EmailForm.java:503)
有什么想法吗? 谢谢 MRizq
答案 0 :(得分:2)
最好能使用方法RetrieveFile。
File localFile = new File("/path/XYZ-17012013.pdf");
FileOutputStream fout = new FileOutputStream(localFile);
boolean success = fTPClient.retrieveFile(ftpServerFilePath, fout);
if (success) {
fout.flush();
fout.close();
} else {
System.out.println("Retrieve failure");
}
答案 1 :(得分:0)
看起来你正在从FTPClient返回一个输入流,因此不能成为空指针的原因。我的猜测是你忘了初始化字节数组bytes
而它是空的。
此外,除非您需要将其存储在其他位置,否则在将其用作附件之前,可能不需要将输入流的内容实际转储到文件中。您可以直接从内存中的二进制数据创建它。