Ensure streams are closed always, reformat code somewhat

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1776647 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Dominik Stadler 2016-12-30 22:12:06 +00:00
parent 6f616d0a51
commit 36406ad3a1
7 changed files with 67 additions and 59 deletions

View File

@ -90,8 +90,22 @@ public class OldExcelExtractor implements Closeable {
if (poifs != null) {
poifs.close();
}
} catch (IOException e) {
// ensure streams are closed correctly
if (poifs != null) {
poifs.close();
}
throw e;
} catch (RuntimeException e) {
// ensure streams are closed correctly
if (poifs != null) {
poifs.close();
}
throw e;
}
@SuppressWarnings("resource")
FileInputStream biffStream = new FileInputStream(f); // NOSONAR
try {

View File

@ -57,9 +57,9 @@ public abstract class ChunkedCipherOutputStream extends FilterOutputStream {
private final File fileOut;
private final DirectoryNode dir;
private long pos = 0;
private long totalPos = 0;
private long written = 0;
private long pos;
private long totalPos;
private long written;
// the cipher can't be final, because for the last chunk we change the padding
// and therefore need to change the cipher too
@ -206,7 +206,7 @@ public abstract class ChunkedCipherOutputStream extends FilterOutputStream {
*
* @throws BadPaddingException
* @throws IllegalBlockSizeException
* @throws ShortBufferException
* @throws ShortBufferException
*/
protected int invokeCipher(int posInChunk, boolean doFinal) throws GeneralSecurityException {
byte plain[] = (plainByteFlags.isEmpty()) ? null : chunk.clone();
@ -281,8 +281,11 @@ public abstract class ChunkedCipherOutputStream extends FilterOutputStream {
os.write(buf);
FileInputStream fis = new FileInputStream(fileOut);
IOUtils.copy(fis, os);
fis.close();
try {
IOUtils.copy(fis, os);
} finally {
fis.close();
}
os.close();

View File

@ -119,8 +119,7 @@ public class StandardEncryptor extends Encryptor implements Cloneable {
throws IOException, GeneralSecurityException {
createEncryptionInfoEntry(dir);
DataSpaceMapUtils.addDefaultDataSpace(dir);
OutputStream countStream = new StandardCipherOutputStream(dir);
return countStream;
return new StandardCipherOutputStream(dir);
}
protected class StandardCipherOutputStream extends FilterOutputStream implements POIFSWriterListener {
@ -188,8 +187,11 @@ public class StandardEncryptor extends Encryptor implements Cloneable {
leos.writeLong(countBytes);
FileInputStream fis = new FileInputStream(fileOut);
IOUtils.copy(fis, leos);
fis.close();
try {
IOUtils.copy(fis, leos);
} finally {
fis.close();
}
if (!fileOut.delete()) {
logger.log(POILogger.ERROR, "Can't delete temporary encryption file: "+fileOut);
}

View File

@ -24,15 +24,13 @@ import java.awt.GraphicsEnvironment;
import java.awt.Toolkit;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Properties;
@SuppressWarnings("deprecation")
public class FontMetricsDumper
{
public class FontMetricsDumper {
@SuppressForbidden("command line tool")
public static void main( String[] args ) throws IOException
{
public static void main(String[] args) throws IOException {
Properties props = new Properties();
Font[] allFonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();
@ -68,13 +66,10 @@ public class FontMetricsDumper
props.setProperty("font." + fontName + ".widths", widths.toString());
}
FileOutputStream fileOut = new FileOutputStream("font_metrics.properties");
try
{
OutputStream fileOut = new FileOutputStream("font_metrics.properties");
try {
props.store(fileOut, "Font Metrics");
}
finally
{
} finally {
fileOut.close();
}
}

View File

@ -25,8 +25,7 @@ import java.util.ArrayList;
* Utilities to read hex from files.
* TODO - move to test packages
*/
public class HexRead
{
public class HexRead {
/**
* This method reads hex data from a filename and returns a byte array.
* The file may contain line comments that are preceeded with a # symbol.
@ -35,16 +34,12 @@ public class HexRead
* @return The bytes read from the file.
* @throws IOException If there was a problem while reading the file.
*/
public static byte[] readData( String filename ) throws IOException
{
public static byte[] readData( String filename ) throws IOException {
File file = new File( filename );
FileInputStream stream = new FileInputStream( file );
try
{
InputStream stream = new FileInputStream( file );
try {
return readData( stream, -1 );
}
finally
{
} finally {
stream.close();
}
}
@ -59,16 +54,12 @@ public class HexRead
* @see #readData(String)
*/
public static byte[] readData(InputStream stream, String section ) throws IOException {
try
{
try {
StringBuffer sectionText = new StringBuffer();
boolean inSection = false;
int c = stream.read();
while ( c != -1 )
{
switch ( c )
{
while ( c != -1 ) {
switch ( c ) {
case '[':
inSection = true;
break;
@ -87,18 +78,15 @@ public class HexRead
}
c = stream.read();
}
}
finally
{
} finally {
stream.close();
}
throw new IOException( "Section '" + section + "' not found" );
}
public static byte[] readData( String filename, String section ) throws IOException
{
File file = new File( filename );
FileInputStream stream = new FileInputStream( file );
return readData(stream, section);
public static byte[] readData( String filename, String section ) throws IOException {
return readData(new FileInputStream( filename ), section);
}
@SuppressWarnings("fallthrough")
@ -110,8 +98,7 @@ public class HexRead
List<Byte> bytes = new ArrayList<Byte>();
final char a = 'a' - 10;
final char A = 'A' - 10;
while ( true )
{
while ( true ) {
int count = stream.read();
int digitValue = -1;
if ( '0' <= count && count <= '9' ) {
@ -131,8 +118,7 @@ public class HexRead
b <<= 4;
b += (byte) digitValue;
characterCount++;
if ( characterCount == 2 )
{
if ( characterCount == 2 ) {
bytes.add( Byte.valueOf( b ) );
characterCount = 0;
b = (byte) 0;
@ -141,8 +127,7 @@ public class HexRead
}
Byte[] polished = bytes.toArray(new Byte[bytes.size()]);
byte[] rval = new byte[polished.length];
for ( int j = 0; j < polished.length; j++ )
{
for ( int j = 0; j < polished.length; j++ ) {
rval[j] = polished[j].byteValue();
}
return rval;
@ -156,11 +141,9 @@ public class HexRead
}
}
static private void readToEOL( InputStream stream ) throws IOException
{
static private void readToEOL( InputStream stream ) throws IOException {
int c = stream.read();
while ( c != -1 && c != '\n' && c != '\r' )
{
while ( c != -1 && c != '\n' && c != '\r' ) {
c = stream.read();
}
}

View File

@ -95,8 +95,11 @@ public class VsdxToPng {
graphics.dispose();
FileOutputStream out = new FileOutputStream(outFile);
ImageIO.write(img, "png", out);
out.close();
try {
ImageIO.write(img, "png", out);
} finally {
out.close();
}
}
public static void renderToPng(XmlVisioDocument document,

View File

@ -235,6 +235,14 @@ public final class TestOldExcelExtractor {
} catch (RecordFormatException e) {
// expected here
}
// a POIFS file which is not a Workbook
try {
new OldExcelExtractor(POIDataSamples.getDocumentInstance().getFile("47304.doc"));
fail("Should catch Exception here");
} catch (FileNotFoundException e) {
// expected here
}
}
@Test