Java+apachecommons-Net:无需下载即可读取FTPFile

Java+apachecommons-Net:无需下载即可读取FTPFile,java,apache-commons-net,readfile,Java,Apache Commons Net,Readfile,使用ApacheCommonsNet3.2,我的程序连接到FTP服务器并从中下载文件 但是,它应该能够读取服务器上的文件,而无需下载它们 这可能吗 只是服务器包含大量的个人信息、SSN、电话、电子邮件等,只有具有正确密码的特定人员才能访问这些信息 没有人应该能够从服务器下载任何东西,至少没有我的程序中授予的最高级别权限 到目前为止,我有一个FTPFile[],其中包含服务器上的所有数据文件 我想对他们进行循环,看看他们是否有当前用户名,这意味着他们可以查看这个人/文件,如果有,将他们的数据添加到

使用ApacheCommonsNet3.2,我的程序连接到FTP服务器并从中下载文件

但是,它应该能够读取服务器上的文件,而无需下载它们

这可能吗

只是服务器包含大量的个人信息、SSN、电话、电子邮件等,只有具有正确密码的特定人员才能访问这些信息

没有人应该能够从服务器下载任何东西,至少没有我的程序中授予的最高级别权限

到目前为止,我有一个FTPFile[],其中包含服务器上的所有数据文件

我想对他们进行循环,看看他们是否有当前用户名,这意味着他们可以查看这个人/文件,如果有,将他们的数据添加到ArrayList中

有什么建议吗

import java.io.File;
import java.io.FileOutputStream;
import java.util.List;
import java.util.Arrays;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;

public class Server {
    private static final String server = "/server";
    private static final String host = "00.000.0.0";
    private static final String user = "username";
    private static final String pass = "password";
    private static List <FTPFile> data;
    private static FTPClient ftp = new FTPClient ();

    public static void load (String folder) {
        try {
            // Connect to the SERVER
            ftp.connect(host, 21);
            if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
                System.out.println("Could not connect to the server.");
                return;
            }

            // Login to the SERVER
            ftp.enterLocalPassiveMode();
            if (!ftp.login(user, pass)) {
                System.out.println("Could not login to the server.");
                return;
            }

            // Get DATA from the SERVER
            System.out.println(server + "/" + folder);
            data = Arrays.asList(ftp.listFiles(server + "/" + folder));
            System.out.println(data.size());
            for (int f = 0; f < data.size(); f++)
                System.out.println(data.get(f).getName());

            // Disconnect from the SERVER
            ftp.logout();
            ftp.disconnect();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static String read (FTPFile file) {
        try {
            String name = file.getName();
            File tempFolder = new File ("temp/" + name);
            tempFolder.mkdirs();

            // Create a TEMPORARY DATA FILE
            File tempFile = new File (tempFolder.getAbsolutePath() + "/data");
            System.out.println(tempFile.getAbsolutePath());
            tempFile.createNewFile();
            tempFile.deleteOnExit();

            // Get ready to DOWNLOAD DATA from the SERVER
            FileOutputStream out = new FileOutputStream (new File (name));
            ftp.connect(host, 21);
            ftp.login(user,  pass);

            // DOWNLOAD and DISCONNECT
            ftp.retrieveFile(name, out);
            out.close();
            ftp.logout();
            ftp.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return ""; // This should return a String with data read from the file
    }
}

不,如果不先下载文件,就无法通过ftp从客户端读取文件


您必须在ftp-服务器端安装软件。

如果您想在文件中读取内容,则必须下载文件,即将其内容从服务器传输到客户端。当您仅限于客户端解决方案时,没有办法解决此问题

通常,只检查客户端中的用户权限是个坏主意。如果恶意用户具有正确的凭据来访问可以从客户端提取的服务器,则他可以绕过客户端授权,使其无效

用户的身份验证和授权应始终发生在服务器端


在您的示例中,您可以考虑在FTP服务器上创建不同的用户和适当的访问权限,读写文件/目录。

你能在电影屏幕上看一部电影而不通过投影仪发光吗?你能在堆栈上问一个问题而不被冷嘲热讽吗?@RichYoung这个问题真的与Java或Apache Commons Net无关。这就是FTP的工作方式。协议中没有列出文件内容的规定。这毕竟是文件传输协议: