0

Did a test,using java to read ftp file,the tools is apache-common-net ftp.I try to read one file,it's ok,but when I read multiple files in a directory,the InputStream(ftpClient.retrieveFileStream) is null.

Can someone help please,thanks.

private static FTPClient ftpClient = new FTPClient();
private static String encoding = System.getProperty("file.encoding");

public static void main(String[] args) {
    ftpClient.setControlEncoding(encoding);
    try {
        ftpClient.connect("host", 21);

        ftpClient.login("user", "password");

        ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);

        int reply = ftpClient.getReplyCode();

        if (!FTPReply.isPositiveCompletion(reply)) {
            ftpClient.disconnect();
            System.out.println("connection error!");
            System.exit(0);
        }

        ftpClient.changeWorkingDirectory(new String("/home/neal/test/"
                .getBytes(encoding), "iso-8859-1"));

        FTPFile[] fs = ftpClient.listFiles();
        for (FTPFile f : fs) {
            // read all txt file
            BufferedReader reader = new BufferedReader(
                    new InputStreamReader(ftpClient.retrieveFileStream(f.getName())));//the input stream will be null
            reader.readLine();
        }
        ftpClient.logout();//

    } catch (SocketException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } finally {
        if (ftpClient.isConnected()) {
            try {
                ftpClient.disconnect();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
Neal
  • 1
  • 1

1 Answers1

0

The solution that I've used was to create two different connection to the FTP in order to read the data from the two different files. Code below :



    SCFTPClient ftpC = new SCFTPClient("localhost", "admin", "admin",
            2222);

    String active = ftpC.readFile(file1);

    ftpC.disconnect();

    SCFTPClient ftpC2 = new SCFTPClient("localhost", "admin", "admin",
            2222);
    if (null != active) {
        file = ftpC2.readFile(file2);
    } else {
        file = ftpC2.readFile(fileName);
    }

    ftpC2.disconnect();