2015-09-30 58 views
0

每次運行下面的代碼時,文件都保存在硬盤上。但是,我希望它只能保存在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(); 
     } 

UPDATE: 我用這API

+1

哪個庫您使用?答案將取決於API支持的內容。 –

+2

刪除3條代碼行(這是btw是錯誤的,因爲它不關閉流),將它寫入文件?有什麼我們在這裏失蹤? – nos

+0

這取決於您使用的API/envinronment。一般Java有很多內置的寫入器/讀取器 –

回答

2

查看Javadoc的Payloads它有一個方法,它接受InputStream。要讀取的字符串作爲InputStream你可以做

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

這將避免需要創建一個文件只是讓你有什麼閱讀。

1

通過閱讀OpenStack4j API,可以從InputStream創建有效載荷,那麼爲什麼不這樣做而不是從File開始呢?

轉換的textInputStream像這樣一個輔助功能:

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));