我有点困惑。我得到了这段代码:
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。
答案 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);
// ...