因为业务需要,需要开发一个从ftp下载文件的功能。想着应该不难。用的是apache的commons的ftp组件。 用ftp连接都没有问题。只是在下载的时候出现了问题。 public void loadFile(String fileName,String folderPath) { InputStream ins = null; fileName = "a.txt"; try { ftpClient.setBufferSize(1024); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); FileOutputStream fileOutputStream = new FileOutputStream( folderPath + fileName); ins = ftpClient.retrieveFileStream(fileName);//这里一直是null if (null != ins) { byte[] b = new byte[ins.available()]; while ((ins.read(b)) != -1) { fileOutputStream.write(b); } fileOutputStream.close(); ins.close(); ftpClient.getReply(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (NullPointerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } |
|
10分 |
为null那里只给了文件名啊,服务端的路径呢?
|
我现在怀疑是我的工作目录出问题了,登录到FTP上之后会跳转到指定目录。但这个目录是根目录,我现在传”/”、”//”、”\”都不行。
public void connectServer(String ip, int port, String userName, String userPwd, String path) { ftpClient = new FTPClient(); try { // 连接 ftpClient.connect(ip, port); // 登录 ftpClient.login(userName, userPwd); if (path != null && path.length() > 0) { // 跳转到指定目录 ftpClient.changeWorkingDirectory(path); } } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } |
|
因为是FTP根目录,我只给了文件名。 |
|
以下代码就是问题代码。不知道为什么fclient.retrieveFileStream一直无法取出来
try { FTPClient fclient = new FTPClient(); fclient.connect("127.0.0.1", 21); fclient.login("root", "root"); System.out.println(fclient.isConnected()); fclient.changeWorkingDirectory(null); fclient.setBufferSize(1024); fclient.setFileType(FTP.BINARY_FILE_TYPE); FileOutputStream fileOutputStream = new FileOutputStream("c:\a.txt"); InputStream ins = null; ins = fclient.retrieveFileStream("20141201.txt"); if (null != ins) { System.out.println("==========="); byte[] b = new byte[ins.available()]; while ((ins.read(b)) != -1) { fileOutputStream.write(b); } fileOutputStream.close(); ins.close(); fclient.getReply(); } } catch (Exception e) { e.printStackTrace(); } |
|
10分 |
登录之后 先做一下list 看看结果
|
设置成被动模式就好了。但是现在问题很奇怪。测试debug模式的时候可以下载文件。但生产模式运行的时候就下载不了。http://bbs.csdn.net/topics/390944928?page=1#post-398618127 |
|
20分 |
以前搞过,现在忘记了,建议楼主一步一步排查,先看是否登录成功,再把当前目录和目录下的文件及文件夹都输出来。
|