3

我正在使用 AWS java SDK 在 AWS 管理控制台的存储桶上上传文件。但是,如果第一次尝试访问它时没有这样的文件在线,我的代码将捕获异常(NoSuchKey)。然后我想关闭连接。问题是我没有任何参考来关闭该连接,因为异常(原始参考将为空)。这是我的代码:

    S3Object object = null;
    GetObjectRequest req = new GetObjectRequest(bucketName, fileName);

    try{
        logconfig();

        object = s3Client.getObject(req);
                  ...
    catch(AmazonServiceException e){
        if(e.getErrorCode().equals("NoSuchKey"))

我试图使用“对象”作为参考来关闭我的 Eclipse 和 Aws 之间的连接,但是当异常发生时,显然“对象”为空。谁能告诉我该怎么做?此外,由于我无法关闭连接,我的控制台将每 60 秒出现一次警告:

8351167 [java-sdk-http-connection-reaper] DEBUG org.apache.http.impl.conn.PoolingClientConnectionManager  - Closing connections idle longer than 60 SECONDS
4

1 回答 1

1

如果您使用 Java 1.7,则可以使用try-with-resouce块。离开方块时物体会自动关闭。

GetObjectRequest req = new GetObjectRequest(bucketName, fileName);
try(S3Object object = s3Client.getObject(req)) {
    ...
} catch(AmazonServiceException e) {
    if(e.getErrorCode().equals("NoSuchKey"));
}

如果你使用 Java 1.6 或之前的版本,你需要在 finally 块中进行

S3Object object = null;
GetObjectRequest req = new GetObjectRequest(bucketName, fileName);
try {
    object = s3Client.getObject(req))
    ...
} catch(AmazonServiceException e) {
    if(e.getErrorCode().equals("NoSuchKey"));
} finally {
    if (object != null) {
        object.close();
    }
}
于 2014-01-21T07:57:18.673 回答