diff --git a/bundles/org.eclipse.wst.jsdt.core/src/org/eclipse/wst/jsdt/internal/core/search/indexing/AddLibraryFileToIndex.java b/bundles/org.eclipse.wst.jsdt.core/src/org/eclipse/wst/jsdt/internal/core/search/indexing/AddLibraryFileToIndex.java
index 946f2f4..88564d5 100644
--- a/bundles/org.eclipse.wst.jsdt.core/src/org/eclipse/wst/jsdt/internal/core/search/indexing/AddLibraryFileToIndex.java
+++ b/bundles/org.eclipse.wst.jsdt.core/src/org/eclipse/wst/jsdt/internal/core/search/indexing/AddLibraryFileToIndex.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2012 IBM Corporation and others.
+ * Copyright (c) 2000, 2015 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -175,26 +175,34 @@
 					}
 					else if (org.eclipse.wst.jsdt.internal.compiler.util.Util.isArchiveFileName(file.getName())){
 						ZipFile zip = new ZipFile(file);
-						for (Enumeration e = zip.entries(); e.hasMoreElements();) {
-							if (this.isCancelled) {
-								if (JobManager.VERBOSE)
-									org.eclipse.wst.jsdt.internal.core.util.Util.verbose("-> indexing of " + zip.getName() + " has been cancelled"); //$NON-NLS-1$ //$NON-NLS-2$
-								return false;
-							}
-	
-							// iterate each entry to index it
-							ZipEntry ze = (ZipEntry) e.nextElement();
-							if (Util.isClassFileName(ze.getName())) {
-								InputStreamReader inputStreamReader = new InputStreamReader(zip.getInputStream(ze), "utf8"); //$NON-NLS-1$
-								StringBuffer buffer = new StringBuffer();
-								char c[] = new char[2048];
-								int length = 0;
-								while ((length = inputStreamReader.read(c)) > -1) {
-									buffer.append(c, 0, length);
+						try {
+							for (Enumeration e = zip.entries(); e.hasMoreElements();) {
+								if (this.isCancelled) {
+									if (JobManager.VERBOSE)
+										org.eclipse.wst.jsdt.internal.core.util.Util.verbose("-> indexing of " + zip.getName() + " has been cancelled"); //$NON-NLS-1$ //$NON-NLS-2$
+									return false;
 								}
-								JavaSearchDocument entryDocument = new JavaSearchDocument(ze, libraryFilePath, buffer.toString().toCharArray(), participant);
-								this.manager.indexDocument(entryDocument, participant, index, this.containerPath);
+		
+								// iterate each entry to index it
+								ZipEntry ze = (ZipEntry) e.nextElement();
+								if (Util.isClassFileName(ze.getName())) {
+									StringBuffer buffer = new StringBuffer();
+									InputStreamReader inputStreamReader = new InputStreamReader(zip.getInputStream(ze), "utf8"); //$NON-NLS-1$
+									try {
+										char c[] = new char[2048];
+										int length = 0;
+										while ((length = inputStreamReader.read(c)) > -1) {
+											buffer.append(c, 0, length);
+										}
+									} finally {
+										inputStreamReader.close();
+									}
+									JavaSearchDocument entryDocument = new JavaSearchDocument(ze, libraryFilePath, buffer.toString().toCharArray(), participant);
+									this.manager.indexDocument(entryDocument, participant, index, this.containerPath);
+								}
 							}
+						} finally {
+							zip.close();
 						}
 					}
 				} else {
@@ -238,7 +246,7 @@
 	{
 		try {
 			final char[] classFileChars = org.eclipse.wst.jsdt.internal.compiler.util.Util.getFileCharContent(file,null);
-			String packageName="";
+			String packageName=""; //$NON-NLS-1$
 			JavaSearchDocument entryDocument = new JavaSearchDocument(  new Path(file.getAbsolutePath()), classFileChars, participant,packageName);
 			this.manager.indexDocument(entryDocument, participant, index, this.containerPath);
 		} catch (Exception ex)
diff --git a/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/corext/refactoring/changes/DeletePackageFragmentRootChange.java b/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/corext/refactoring/changes/DeletePackageFragmentRootChange.java
index 429e150..53c9922 100644
--- a/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/corext/refactoring/changes/DeletePackageFragmentRootChange.java
+++ b/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/corext/refactoring/changes/DeletePackageFragmentRootChange.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2015 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -154,6 +154,13 @@
 			return (int) reader.skip(Integer.MAX_VALUE);
 		} catch (IOException e) {
 			throw new CoreException(new Status(IStatus.ERROR, Corext.getPluginId(), e.getMessage(), e));
+		} finally {
+			try {
+				reader.close();
+			}
+			catch (IOException e) {
+				// Ignore
+			}
 		}
 	}
 
diff --git a/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/ui/infoviews/JavadocView.java b/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/ui/infoviews/JavadocView.java
index 8a36a44..e1dbc03 100644
--- a/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/ui/infoviews/JavadocView.java
+++ b/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/ui/infoviews/JavadocView.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
+ * Copyright (c) 2000, 2015 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -365,15 +365,18 @@
 
 		try {
 			styleSheetURL= FileLocator.toFileURL(styleSheetURL);
-			BufferedReader reader= new BufferedReader(new InputStreamReader(styleSheetURL.openStream()));
 			StringBuffer buffer= new StringBuffer(200);
-			String line= reader.readLine();
-			while (line != null) {
-				buffer.append(line);
-				buffer.append('\n');
-				line= reader.readLine();
+			BufferedReader reader= new BufferedReader(new InputStreamReader(styleSheetURL.openStream()));
+			try {
+				String line= reader.readLine();
+				while (line != null) {
+					buffer.append(line);
+					buffer.append('\n');
+					line= reader.readLine();
+				}
+			} finally {
+				reader.close();
 			}
-
 			FontData fontData= JFaceResources.getFontRegistry().getFontData(PreferenceConstants.APPEARANCE_JAVADOC_FONT)[0];
 			return HTMLPrinter.convertTopLevelFont(buffer.toString(), fontData);
 		} catch (IOException ex) {
diff --git a/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/ui/text/java/AbstractJavaCompletionProposal.java b/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/ui/text/java/AbstractJavaCompletionProposal.java
index 6e70fed..aff366a 100644
--- a/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/ui/text/java/AbstractJavaCompletionProposal.java
+++ b/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/ui/text/java/AbstractJavaCompletionProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2011 IBM Corporation and others.
+ * Copyright (c) 2005, 2015 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -515,13 +515,17 @@
 			if (url != null) {
 				try {
 					url= FileLocator.toFileURL(url);
-					BufferedReader reader= new BufferedReader(new InputStreamReader(url.openStream()));
 					StringBuffer buffer= new StringBuffer(200);
-					String line= reader.readLine();
-					while (line != null) {
-						buffer.append(line);
-						buffer.append('\n');
-						line= reader.readLine();
+					BufferedReader reader= new BufferedReader(new InputStreamReader(url.openStream()));
+					try {
+						String line= reader.readLine();
+						while (line != null) {
+							buffer.append(line);
+							buffer.append('\n');
+							line= reader.readLine();
+						}
+					} finally {
+						reader.close();
 					}
 					fgCSSStyles= buffer.toString();
 				} catch (IOException ex) {
diff --git a/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/ui/text/java/hover/AbstractJavaEditorTextHover.java b/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/ui/text/java/hover/AbstractJavaEditorTextHover.java
index bf96fb9..eff0988 100644
--- a/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/ui/text/java/hover/AbstractJavaEditorTextHover.java
+++ b/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/ui/text/java/hover/AbstractJavaEditorTextHover.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2015 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -163,13 +163,17 @@
 		if (styleSheetURL != null) {
 			try {
 				styleSheetURL= FileLocator.toFileURL(styleSheetURL);
-				BufferedReader reader= new BufferedReader(new InputStreamReader(styleSheetURL.openStream()));
 				StringBuffer buffer= new StringBuffer(200);
-				String line= reader.readLine();
-				while (line != null) {
-					buffer.append(line);
-					buffer.append('\n');
-					line= reader.readLine();
+				BufferedReader reader= new BufferedReader(new InputStreamReader(styleSheetURL.openStream()));
+				try {
+					String line= reader.readLine();
+					while (line != null) {
+						buffer.append(line);
+						buffer.append('\n');
+						line= reader.readLine();
+					}
+				} finally {
+					reader.close();
 				}
 				return buffer.toString();
 			} catch (IOException ex) {
diff --git a/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/ui/text/spelling/engine/AbstractSpellDictionary.java b/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/ui/text/spelling/engine/AbstractSpellDictionary.java
index 754a1d1..b5e2935 100644
--- a/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/ui/text/spelling/engine/AbstractSpellDictionary.java
+++ b/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/ui/text/spelling/engine/AbstractSpellDictionary.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2015 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -487,28 +487,31 @@
 					decoder.onMalformedInput(CodingErrorAction.REPORT);
 					decoder.onUnmappableCharacter(CodingErrorAction.REPORT);
 					final BufferedReader reader= new BufferedReader(new InputStreamReader(stream, decoder));
-					
-					boolean doRead= true;
-					while (doRead) {
-						try {
-							word= reader.readLine();
-						} catch (MalformedInputException ex) {
-							// Tell the decoder to replace malformed input in order to read the line.
-							decoder.onMalformedInput(CodingErrorAction.REPLACE);
-							decoder.reset();
-							word= reader.readLine();
-							decoder.onMalformedInput(CodingErrorAction.REPORT);
-							
-							String message= Messages.format(JavaUIMessages.AbstractSpellingDictionary_encodingError, new String[] { word, decoder.replacement(), url.toString() });
-							IStatus status= new Status(IStatus.ERROR, JavaScriptUI.ID_PLUGIN, IStatus.OK, message, ex);
-							JavaScriptPlugin.log(status);
-							
+					try {
+						boolean doRead= true;
+						while (doRead) {
+							try {
+								word= reader.readLine();
+							} catch (MalformedInputException ex) {
+								// Tell the decoder to replace malformed input in order to read the line.
+								decoder.onMalformedInput(CodingErrorAction.REPLACE);
+								decoder.reset();
+								word= reader.readLine();
+								decoder.onMalformedInput(CodingErrorAction.REPORT);
+								
+								String message= Messages.format(JavaUIMessages.AbstractSpellingDictionary_encodingError, new String[] { word, decoder.replacement(), url.toString() });
+								IStatus status= new Status(IStatus.ERROR, JavaScriptUI.ID_PLUGIN, IStatus.OK, message, ex);
+								JavaScriptPlugin.log(status);
+								
+								doRead= word != null;
+								continue;
+							}
 							doRead= word != null;
-							continue;
+							if (doRead)
+								hashWord(word);
 						}
-						doRead= word != null;
-						if (doRead)
-							hashWord(word);
+					} finally {
+						reader.close();
 					}
 					return true;
 				}
diff --git a/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/ui/text/spelling/engine/PersistentSpellDictionary.java b/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/ui/text/spelling/engine/PersistentSpellDictionary.java
index a25dab0..96867b6 100644
--- a/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/ui/text/spelling/engine/PersistentSpellDictionary.java
+++ b/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/ui/text/spelling/engine/PersistentSpellDictionary.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2015 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,7 +13,6 @@
 
 import java.io.FileOutputStream;
 import java.io.IOException;
-import java.io.OutputStreamWriter;
 import java.net.URL;
 import java.nio.ByteBuffer;
 import java.nio.charset.Charset;
@@ -55,20 +54,20 @@
 		if (isCorrect(word))
 			return;
 
-		OutputStreamWriter writer= null;
-		try {
-			Charset charset= Charset.forName(getEncoding());
-			ByteBuffer byteBuffer= charset.encode(word + "\n"); //$NON-NLS-1$
-			int size= byteBuffer.limit();
-			final byte[] byteArray;
-			if (byteBuffer.hasArray())
-				byteArray= byteBuffer.array();
-			else {
-				byteArray= new byte[size];
-				byteBuffer.get(byteArray);
-			}
+		Charset charset= Charset.forName(getEncoding());
+		ByteBuffer byteBuffer= charset.encode(word + "\n"); //$NON-NLS-1$
+		int size= byteBuffer.limit();
+		final byte[] byteArray;
+		if (byteBuffer.hasArray())
+			byteArray= byteBuffer.array();
+		else {
+			byteArray= new byte[size];
+			byteBuffer.get(byteArray);
+		}
+		FileOutputStream fileStream = null;
 			
-			FileOutputStream fileStream= new FileOutputStream(fLocation.getPath(), true);
+		try {
+			fileStream= new FileOutputStream(fLocation.getPath(), true);
 			
 			// Encoding UTF-16 charset writes a BOM. In which case we need to cut it away if the file isn't empty
 			int bomCutSize= 0;
@@ -81,9 +80,10 @@
 			return;
 		} finally {
 			try {
-				if (writer != null)
-					writer.close();
+				if (fileStream != null)
+					fileStream.close();
 			} catch (IOException e) {
+				// Ignore
 			}
 		}
 
diff --git a/tests/org.eclipse.wst.jsdt.core.tests.compiler/src/org/eclipse/wst/jsdt/core/tests/util/Util.java b/tests/org.eclipse.wst.jsdt.core.tests.compiler/src/org/eclipse/wst/jsdt/core/tests/util/Util.java
index 82079b8..9fe4763 100644
--- a/tests/org.eclipse.wst.jsdt.core.tests.compiler/src/org/eclipse/wst/jsdt/core/tests/util/Util.java
+++ b/tests/org.eclipse.wst.jsdt.core.tests.compiler/src/org/eclipse/wst/jsdt/core/tests/util/Util.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2013 IBM Corporation and others.
+ * Copyright (c) 2000, 2015 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -49,7 +49,7 @@
 import org.eclipse.wst.jsdt.internal.compiler.problem.DefaultProblem;
 import org.eclipse.wst.jsdt.internal.compiler.problem.DefaultProblemFactory;
 public class Util {
-	private static String TARGET_PLUGIN="org.eclipse.wst.jsdt.core";
+	private static String TARGET_PLUGIN="org.eclipse.wst.jsdt.core"; //$NON-NLS-1$
 	// Trace for delete operation
 	/*
 	 * Maximum time wasted repeating delete operations while running JDT/Core tests.
@@ -1247,21 +1247,17 @@
 }
 public static void writeToFile(String contents, String destinationFilePath) {
 	File destFile = new File(destinationFilePath);
-	FileOutputStream output = null;
+	PrintWriter writer = null;
 	try {
-		output = new FileOutputStream(destFile);
-		PrintWriter writer = new PrintWriter(output);
+		writer = new PrintWriter(new FileOutputStream(destFile));
 		writer.print(contents);
 		writer.flush();
 	} catch (IOException e) {
 		e.printStackTrace();
 		return;
 	} finally {
-		if (output != null) {
-			try {
-				output.close();
-			} catch (IOException e2) {
-			}
+		if (writer != null) {
+			writer.close();
 		}
 	}
 }
diff --git a/tests/org.eclipse.wst.jsdt.core.tests.model/src/org/eclipse/wst/jsdt/core/tests/utils/BundleResourceUtil.java b/tests/org.eclipse.wst.jsdt.core.tests.model/src/org/eclipse/wst/jsdt/core/tests/utils/BundleResourceUtil.java
index 5e954c6..e007ada 100644
--- a/tests/org.eclipse.wst.jsdt.core.tests.model/src/org/eclipse/wst/jsdt/core/tests/utils/BundleResourceUtil.java
+++ b/tests/org.eclipse.wst.jsdt.core.tests.model/src/org/eclipse/wst/jsdt/core/tests/utils/BundleResourceUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2012 IBM Corporation and others.
+ * Copyright (c) 2005, 2015 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -137,9 +137,10 @@
 				IFile file = null;
 				URL entry = Activator.getDefault().getBundle().getEntry(zipFileEntry);
 				if(entry != null) {
+					ZipInputStream input = null;
 					try {
 						byte[] b = new byte[2048];
-						ZipInputStream input = new ZipInputStream(entry.openStream());
+						input = new ZipInputStream(entry.openStream());
 
 						ZipEntry nextEntry = input.getNextEntry();
 						while(nextEntry != null) {
@@ -185,6 +186,14 @@
 					} catch(CoreException e) {
 						// TODO Auto-generated catch block
 						e.printStackTrace();
+					} finally {
+						try {
+							if (input != null)
+								input.close();
+						}
+						catch (IOException e) {
+							// Ignore
+						}
 					}
 				} else {
 					System.err.println("can't find " + zipFileEntry);
diff --git a/tests/org.eclipse.wst.jsdt.core.tests.model/src/org/eclipse/wst/jsdt/core/tests/utils/SequenceReaderTests.java b/tests/org.eclipse.wst.jsdt.core.tests.model/src/org/eclipse/wst/jsdt/core/tests/utils/SequenceReaderTests.java
index 7363eda..baabfa1 100644
--- a/tests/org.eclipse.wst.jsdt.core.tests.model/src/org/eclipse/wst/jsdt/core/tests/utils/SequenceReaderTests.java
+++ b/tests/org.eclipse.wst.jsdt.core.tests.model/src/org/eclipse/wst/jsdt/core/tests/utils/SequenceReaderTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2015 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,10 +25,14 @@
 		Reader[] readers = new Reader[]{new StringReader("Ready")};
 		Reader sequenceReader = new SequenceReader(readers);
 		StringBuffer buff = new StringBuffer();
-		int c = sequenceReader.read();
-		while (c != -1) {
-			buff.append((char) c);
-			c = sequenceReader.read();
+		try {
+			int c = sequenceReader.read();
+			while (c != -1) {
+				buff.append((char) c);
+				c = sequenceReader.read();
+			}
+		} finally {
+			sequenceReader.close();
 		}
 		assertEquals("Ready", buff.toString());
 	}
@@ -37,10 +41,14 @@
 		Reader[] readers = new Reader[]{new StringReader("Ready"), new StringReader("Set"), new StringReader("Go")};
 		Reader sequenceReader = new SequenceReader(readers);
 		StringBuffer buff = new StringBuffer();
-		int c = sequenceReader.read();
-		while (c != -1) {
-			buff.append((char) c);
-			c = sequenceReader.read();
+		try {
+			int c = sequenceReader.read();
+			while (c != -1) {
+				buff.append((char) c);
+				c = sequenceReader.read();
+			}
+		} finally {
+			sequenceReader.close();
 		}
 		assertEquals("ReadySetGo", buff.toString());
 	}
@@ -49,10 +57,14 @@
 		Reader[] readers = new Reader[]{new StringReader("")};
 		Reader sequenceReader = new SequenceReader(readers);
 		StringBuffer buff = new StringBuffer();
-		int c = sequenceReader.read();
-		while (c != -1) {
-			buff.append((char) c);
-			c = sequenceReader.read();
+		try {
+			int c = sequenceReader.read();
+			while (c != -1) {
+				buff.append((char) c);
+				c = sequenceReader.read();
+			}
+		} finally {
+			sequenceReader.close();
 		}
 		assertEquals("something was read from an empty reader", 0, buff.length());
 	}
@@ -61,10 +73,14 @@
 		Reader[] readers = new Reader[0];
 		Reader sequenceReader = new SequenceReader(readers);
 		StringBuffer buff = new StringBuffer();
-		int c = sequenceReader.read();
-		while (c != -1) {
-			buff.append((char) c);
-			c = sequenceReader.read();
+		try {
+			int c = sequenceReader.read();
+			while (c != -1) {
+				buff.append((char) c);
+				c = sequenceReader.read();
+			}
+		} finally {
+			sequenceReader.close();
 		}
 		assertEquals("something was read from nothing", 0, buff.length());
 	}
@@ -73,10 +89,14 @@
 		Reader[] readers = new Reader[]{new StringReader("Ready"), new StringReader("Set"), new StringReader("Go")};
 		Reader sequenceReader = new BufferedReader(new SequenceReader(readers));
 		StringBuffer buff = new StringBuffer();
-		int c = sequenceReader.read();
-		while (c != -1) {
-			buff.append((char) c);
-			c = sequenceReader.read();
+		try {
+			int c = sequenceReader.read();
+			while (c != -1) {
+				buff.append((char) c);
+				c = sequenceReader.read();
+			}
+		} finally {
+			sequenceReader.close();
 		}
 		assertEquals("ReadySetGo", buff.toString());
 	}
diff --git a/tests/org.eclipse.wst.jsdt.ui.tests/src/org/eclipse/wst/jsdt/ui/tests/utils/BundleResourceUtil.java b/tests/org.eclipse.wst.jsdt.ui.tests/src/org/eclipse/wst/jsdt/ui/tests/utils/BundleResourceUtil.java
index 554f515..304dbd8 100644
--- a/tests/org.eclipse.wst.jsdt.ui.tests/src/org/eclipse/wst/jsdt/ui/tests/utils/BundleResourceUtil.java
+++ b/tests/org.eclipse.wst.jsdt.ui.tests/src/org/eclipse/wst/jsdt/ui/tests/utils/BundleResourceUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2012 IBM Corporation and others.
+ * Copyright (c) 2005, 2015 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -138,9 +138,10 @@
 				IFile file = null;
 				URL entry = Activator.getDefault().getBundle().getEntry(zipFileEntry);
 				if(entry != null) {
+					ZipInputStream input = null;
 					try {
 						byte[] b = new byte[2048];
-						ZipInputStream input = new ZipInputStream(entry.openStream());
+						input = new ZipInputStream(entry.openStream());
 
 						ZipEntry nextEntry = input.getNextEntry();
 						while(nextEntry != null) {
@@ -186,6 +187,14 @@
 					} catch(CoreException e) {
 						// TODO Auto-generated catch block
 						e.printStackTrace();
+					} finally {
+						try {
+							if (input != null)
+								input.close();
+						}
+						catch (IOException e) {
+							// Ignore
+						}
 					}
 				} else {
 					System.err.println("can't find " + zipFileEntry);
