如何避免在硬盘上保存文件?

时间:2015-09-30 13:11:57

标签: java file file-io filewriter bufferedwriter

每次运行以下代码时,文件都会保存在硬盘上。但是,我希望它只保存在Object Storage容器中。

OSClient os = OSFactory.builder()
                .endpoint("...")
                .credentials("...","...")
                .tenantName("...")
                .authenticate();

        String containerName = "MyImgs";
        String objectName = "test.jpg";

BufferedWriter output = null;
        try {
            File f = new File(objectName);
            output = new BufferedWriter(new FileWriter(f));
            output.write(text);
            String etag = os.objectStorage().objects().put(containerName, 
                                                           objectName, 
                                                           Payloads.create(f));
        } catch ( IOException e ) {
            e.printStackTrace();
        }

更新 我正在使用此API

2 个答案:

答案 0 :(得分:2)

查看Payloads的Javadoc,它有一个接收InputStream的方法。要将String作为InputStream读取,您可以执行

Payloads.create(new ByteArrayInputStream(text.getBytes());

这样就可以避免创建文件,只需要阅读。

答案 1 :(得分:1)

通过阅读OpenStack4j API,可以从InputStream创建有效负载,那么为什么不这样做而不是File

使用如下辅助函数将text转换为InputStream

private static InputStream newInputStreamFrom(String text) {
    try {
        return new ByteArrayInputStream(text.getBytes("UTF-8"));
    } catch (UnsupportedEncodingException e) {
        throw new AssertionError(); // should not occur
    }
}

然后你的代码看起来像这样:

OSClient os = OSFactory.builder()
            .endpoint("...")
            .credentials("...","...")
            .tenantName("...")
            .authenticate();

    String containerName = "MyImgs";
    String objectName = "test.jpg";
    InputStream stream = newInputStreamFrom(text);
    String etag = os.objectStorage().objects().put(containerName, 
                                                       objectName,
                                                       Payloads.create(stream));