FileInputStream从变量读取到FTPClient

时间:2013-11-20 00:03:06

标签: java fileinputstream objectinputstream

我有点困惑。我得到了这段代码:

public void serializeStock(){

    FTPClient client = new FTPClient();

    try{
        client.connect("ftp.**.***");
        client.login("***", "*****");

        FileInputStream fin = new FileInputStream(someVariableContainingObject); // <-- The object ( StockVault stocks = new StockVault();
        ObjectInputStream oos = new ObjectInputStream(fin);
        client.storeFile("theObject", oos);
        System.out.println("Wrote Stocks data to file");

        client.logout();
        client.disconnect();
    }catch(Exception ex){
        ex.printStackTrace();
    }
}

我打开了与远程FTP服务器的连接,我现在想把一个名为“stocks”的对象写入服务器。我知道我可以先保存目标文件,然后上传它。但是可以将对象存储在“文件”变量或其他内容中,并将其直接提供给FileInputStream吗?这样我就不必将对象保存到实际的系统文件中,然后上传它。但是制作某种变量来保存文件,然后将“文件变量”上传到ftp-server。

1 个答案:

答案 0 :(得分:0)

可以直接流式传输到FTP服务器,但FileInputStream不是正确的类 - 它总是从本地文件中读取。

在您的情况下,最简单的方法可能是使用

client.storeFileStream(remoteName)

此方法返回您可以写入的输出流(而不是从给定的输入流中提取所有数据),这似乎更适合您的情况。

示例:

OutputStream os = client.storeFileStream("theObject");
ObjectOutputStream oos = new ObjectOutputStream(os);

// write your object to oos here,
// then close everything.

使用与示例中相同的客户端方法的替代方法,但没有文件首先将对象写入ByteArrayOutputStream,然后从ByteArrayInputStream创建getBytes(),并手到了ftp客户端。

BTW:您的代码中的对象流可以省略 - 您可以直接使用文件流:

FileInputStream fin = new FileInputStream(someVariableContainingObject); 
client.storeFile("theObject", fin);
// ...