Autoclose FileOutputStreams (#5753)

This commit is contained in:
Chris H
2024-08-01 14:22:40 -04:00
committed by GitHub
parent e6379daf91
commit 5fc6d38954
9 changed files with 120 additions and 195 deletions

View File

@@ -17,26 +17,18 @@
*/ */
package forge.util; package forge.util;
import java.io.BufferedReader; import org.apache.commons.lang3.StringUtils;
import java.io.File; import org.apache.commons.lang3.tuple.Pair;
import java.io.FileInputStream;
import java.io.FileOutputStream; import java.io.*;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.Reader;
import java.net.URL; import java.net.URL;
import java.nio.file.Files;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
/** /**
* <p> * <p>
* FileUtil class. * FileUtil class.
@@ -117,8 +109,8 @@ public final class FileUtil {
File source = new File(sourceFilename); File source = new File(sourceFilename);
if (!source.exists()) { return; } //if source doesn't exist, nothing to copy if (!source.exists()) { return; } //if source doesn't exist, nothing to copy
try (InputStream is = new FileInputStream(source); try (InputStream is = Files.newInputStream(source.toPath());
OutputStream os = new FileOutputStream(new File(destFilename))){ OutputStream os = Files.newOutputStream(new File(destFilename).toPath())){
byte[] buffer = new byte[1024]; byte[] buffer = new byte[1024];
int length; int length;
while ((length = is.read(buffer)) > 0) { while ((length = is.read(buffer)) > 0) {

View File

@@ -1,31 +1,5 @@
package forge.gui.framework; package forge.gui.framework;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.Rectangle;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map.Entry;
import java.util.concurrent.atomic.AtomicBoolean;
import javax.swing.border.EmptyBorder;
import javax.xml.stream.XMLEventFactory;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLEventWriter;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.Attribute;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;
import forge.Singletons; import forge.Singletons;
import forge.gui.FThreads; import forge.gui.FThreads;
import forge.gui.SOverlayUtils; import forge.gui.SOverlayUtils;
@@ -42,6 +16,19 @@ import forge.util.maps.MapOfLists;
import forge.view.FFrame; import forge.view.FFrame;
import forge.view.FView; import forge.view.FView;
import javax.swing.border.EmptyBorder;
import javax.xml.stream.*;
import javax.xml.stream.events.Attribute;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;
import java.awt.*;
import java.io.*;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map.Entry;
import java.util.concurrent.atomic.AtomicBoolean;
/** /**
* Handles layout saving and loading. * Handles layout saving and loading.
* *
@@ -297,12 +284,9 @@ public final class SLayoutIO {
} }
final XMLOutputFactory out = XMLOutputFactory.newInstance(); final XMLOutputFactory out = XMLOutputFactory.newInstance();
FileOutputStream fos = null;
XMLEventWriter writer = null; XMLEventWriter writer = null;
try { try(FileOutputStream fos = new FileOutputStream(fWriteTo);) {
String layoutSerial = getLayoutSerial(file.defaultLoc); String layoutSerial = getLayoutSerial(file.defaultLoc);
fos = new FileOutputStream(fWriteTo);
writer = out.createXMLEventWriter(fos); writer = out.createXMLEventWriter(fos);
final List<DragCell> cells = FView.SINGLETON_INSTANCE.getDragCells(); final List<DragCell> cells = FView.SINGLETON_INSTANCE.getDragCells();
@@ -337,15 +321,12 @@ public final class SLayoutIO {
} }
writer.flush(); writer.flush();
writer.add(EF.createEndDocument()); writer.add(EF.createEndDocument());
} catch (FileNotFoundException | XMLStreamException e) { } catch (XMLStreamException | IOException e) {
// TODO Auto-generated catch block ignores the exception, but sends it to System.err and probably forge.log. // TODO Auto-generated catch block ignores the exception, but sends it to System.err and probably forge.log.
e.printStackTrace(); e.printStackTrace();
} finally { } finally {
if ( writer != null ) if ( writer != null )
try { writer.close(); } catch (XMLStreamException e) {} try { writer.close(); } catch (XMLStreamException e) {}
if ( fos != null )
try { fos.close(); } catch (IOException e) {}
} }
} }

View File

@@ -5,12 +5,12 @@ import forge.Forge;
import forge.gui.GuiBase; import forge.gui.GuiBase;
import forge.localinstance.properties.ForgeConstants; import forge.localinstance.properties.ForgeConstants;
import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.URL; import java.net.URL;
import java.nio.file.Files;
public class LibGDXImageFetcher extends ImageFetcher { public class LibGDXImageFetcher extends ImageFetcher {
@Override @Override
@@ -45,11 +45,11 @@ public class LibGDXImageFetcher extends ImageFetcher {
FileHandle destFile = new FileHandle(newdespath + ".tmp"); FileHandle destFile = new FileHandle(newdespath + ".tmp");
System.out.println(newdespath); System.out.println(newdespath);
destFile.parent().mkdirs(); destFile.parent().mkdirs();
OutputStream out = new FileOutputStream(destFile.file()); try(OutputStream out = Files.newOutputStream(destFile.file().toPath())) {
// Conversion to JPEG will be handled differently depending on the platform // Conversion to JPEG will be handled differently depending on the platform
Forge.getDeviceAdapter().convertToJPEG(is, out); Forge.getDeviceAdapter().convertToJPEG(is, out);
is.close(); is.close();
out.close(); //close outputstream before destfile.moveto so it can delete the tmp file internally }
destFile.moveTo(new FileHandle(newdespath)); destFile.moveTo(new FileHandle(newdespath));
System.out.println("Saved image to " + newdespath); System.out.println("Saved image to " + newdespath);

View File

@@ -1,18 +1,12 @@
package forge.deck.io; package forge.deck.io;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.tuple.Pair;
import forge.game.GameFormat; import forge.game.GameFormat;
import forge.localinstance.properties.ForgeConstants; import forge.localinstance.properties.ForgeConstants;
import org.apache.commons.lang3.tuple.Pair;
import java.io.*;
import java.util.List;
import java.util.Map;
/** /**
* Created by maustin on 11/05/2017. * Created by maustin on 11/05/2017.
@@ -28,7 +22,6 @@ public class CardThemedLDAIO {
try (FileOutputStream f = new FileOutputStream(file); try (FileOutputStream f = new FileOutputStream(file);
ObjectOutputStream s = new ObjectOutputStream(f)){ ObjectOutputStream s = new ObjectOutputStream(f)){
s.writeObject(lda); s.writeObject(lda);
s.close();
} catch (IOException e) { } catch (IOException e) {
System.out.println("Error writing matrix data: " + e); System.out.println("Error writing matrix data: " + e);
} }

View File

@@ -1,23 +1,5 @@
package forge.gamemodes.gauntlet; package forge.gamemodes.gauntlet;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.EnumMap;
import java.util.List;
import java.util.Map.Entry;
import java.util.SortedSet;
import java.util.TreeMap;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import org.apache.commons.lang3.StringUtils;
import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.converters.ConversionException; import com.thoughtworks.xstream.converters.ConversionException;
import com.thoughtworks.xstream.converters.Converter; import com.thoughtworks.xstream.converters.Converter;
@@ -28,7 +10,6 @@ import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import com.thoughtworks.xstream.security.NoTypePermission; import com.thoughtworks.xstream.security.NoTypePermission;
import com.thoughtworks.xstream.security.NullPermission; import com.thoughtworks.xstream.security.NullPermission;
import com.thoughtworks.xstream.security.PrimitiveTypePermission; import com.thoughtworks.xstream.security.PrimitiveTypePermission;
import forge.deck.CardPool; import forge.deck.CardPool;
import forge.deck.Deck; import forge.deck.Deck;
import forge.deck.DeckSection; import forge.deck.DeckSection;
@@ -37,6 +18,14 @@ import forge.item.PaperCard;
import forge.localinstance.properties.ForgeConstants; import forge.localinstance.properties.ForgeConstants;
import forge.model.FModel; import forge.model.FModel;
import forge.util.IgnoringXStream; import forge.util.IgnoringXStream;
import org.apache.commons.lang3.StringUtils;
import java.io.*;
import java.nio.file.Files;
import java.util.*;
import java.util.Map.Entry;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
public class GauntletIO { public class GauntletIO {
/** Prompt in text field for new (unsaved) built gauntlets. */ /** Prompt in text field for new (unsaved) built gauntlets. */
@@ -155,11 +144,11 @@ public class GauntletIO {
} }
private static void savePacked(final XStream xStream0, final GauntletData gd0) throws IOException { private static void savePacked(final XStream xStream0, final GauntletData gd0) throws IOException {
final BufferedOutputStream bout = new BufferedOutputStream(new FileOutputStream(getGauntletFile(gd0))); try(final BufferedOutputStream bout = new BufferedOutputStream(Files.newOutputStream(getGauntletFile(gd0).toPath()));
final GZIPOutputStream zout = new GZIPOutputStream(bout); final GZIPOutputStream zout = new GZIPOutputStream(bout)) {
xStream0.toXML(gd0, zout); xStream0.toXML(gd0, zout);
zout.flush(); zout.flush();
zout.close(); }
} }
private static class DeckSectionToXml implements Converter { private static class DeckSectionToXml implements Converter {

View File

@@ -17,36 +17,6 @@
*/ */
package forge.gamemodes.quest.io; package forge.gamemodes.quest.io;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.EnumMap;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map.Entry;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.apache.commons.lang3.StringUtils;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.converters.Converter; import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext; import com.thoughtworks.xstream.converters.MarshallingContext;
@@ -56,7 +26,6 @@ import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import com.thoughtworks.xstream.security.NoTypePermission; import com.thoughtworks.xstream.security.NoTypePermission;
import com.thoughtworks.xstream.security.NullPermission; import com.thoughtworks.xstream.security.NullPermission;
import com.thoughtworks.xstream.security.PrimitiveTypePermission; import com.thoughtworks.xstream.security.PrimitiveTypePermission;
import forge.card.CardEdition; import forge.card.CardEdition;
import forge.deck.CardPool; import forge.deck.CardPool;
import forge.deck.Deck; import forge.deck.Deck;
@@ -66,29 +35,31 @@ import forge.gamemodes.quest.QuestController;
import forge.gamemodes.quest.QuestEventDraft; import forge.gamemodes.quest.QuestEventDraft;
import forge.gamemodes.quest.QuestMode; import forge.gamemodes.quest.QuestMode;
import forge.gamemodes.quest.bazaar.QuestItemType; import forge.gamemodes.quest.bazaar.QuestItemType;
import forge.gamemodes.quest.data.DeckConstructionRules; import forge.gamemodes.quest.data.*;
import forge.gamemodes.quest.data.GameFormatQuest;
import forge.gamemodes.quest.data.QuestAchievements;
import forge.gamemodes.quest.data.QuestAssets;
import forge.gamemodes.quest.data.QuestData;
import forge.gamemodes.quest.data.QuestEventDraftContainer;
import forge.gamemodes.quest.data.QuestItemCondition;
import forge.gamemodes.quest.data.QuestPreferences.QPref; import forge.gamemodes.quest.data.QuestPreferences.QPref;
import forge.gamemodes.quest.data.StarRating; import forge.item.*;
import forge.item.BoosterBox;
import forge.item.BoosterPack;
import forge.item.FatPack;
import forge.item.InventoryItem;
import forge.item.PaperCard;
import forge.item.PreconDeck;
import forge.item.SealedProduct;
import forge.item.TournamentPack;
import forge.localinstance.properties.ForgeConstants; import forge.localinstance.properties.ForgeConstants;
import forge.model.FModel; import forge.model.FModel;
import forge.util.FileUtil; import forge.util.FileUtil;
import forge.util.IgnoringXStream; import forge.util.IgnoringXStream;
import forge.util.ItemPool; import forge.util.ItemPool;
import forge.util.XmlUtil; import forge.util.XmlUtil;
import org.apache.commons.lang3.StringUtils;
import org.w3c.dom.*;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.*;
import java.lang.reflect.Field;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
import java.util.Map.Entry;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
/** /**
* <p> * <p>
@@ -452,19 +423,20 @@ public class QuestDataIO {
} }
private static void savePacked(final String f, final XStream xStream, final QuestData qd) throws IOException { private static void savePacked(final String f, final XStream xStream, final QuestData qd) throws IOException {
final BufferedOutputStream bout = new BufferedOutputStream(new FileOutputStream(f)); try(
final GZIPOutputStream zout = new GZIPOutputStream(bout); final BufferedOutputStream bout = new BufferedOutputStream(Files.newOutputStream(Paths.get(f)));
final GZIPOutputStream zout = new GZIPOutputStream(bout)) {
xStream.toXML(qd, zout); xStream.toXML(qd, zout);
zout.flush(); zout.flush();
zout.close(); }
} }
@SuppressWarnings("unused") // used only for debug purposes @SuppressWarnings("unused") // used only for debug purposes
private static void saveUnpacked(final String f, final XStream xStream, final QuestData qd) throws IOException { private static void saveUnpacked(final String f, final XStream xStream, final QuestData qd) throws IOException {
final BufferedOutputStream boutUnp = new BufferedOutputStream(new FileOutputStream(f)); try(final BufferedOutputStream boutUnp = new BufferedOutputStream(Files.newOutputStream(Paths.get(f)))) {
xStream.toXML(qd, boutUnp); xStream.toXML(qd, boutUnp);
boutUnp.flush(); boutUnp.flush();
boutUnp.close(); }
} }
private static class GameFormatQuestToXml implements Converter { private static class GameFormatQuestToXml implements Converter {

View File

@@ -1,18 +1,5 @@
package forge.gamemodes.tournament; package forge.gamemodes.tournament;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Map;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import org.apache.commons.lang3.StringUtils;
import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.converters.Converter; import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext; import com.thoughtworks.xstream.converters.MarshallingContext;
@@ -22,12 +9,18 @@ import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import com.thoughtworks.xstream.security.NoTypePermission; import com.thoughtworks.xstream.security.NoTypePermission;
import com.thoughtworks.xstream.security.NullPermission; import com.thoughtworks.xstream.security.NullPermission;
import com.thoughtworks.xstream.security.PrimitiveTypePermission; import com.thoughtworks.xstream.security.PrimitiveTypePermission;
import forge.deck.CardPool; import forge.deck.CardPool;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.localinstance.properties.ForgeConstants; import forge.localinstance.properties.ForgeConstants;
import forge.model.FModel; import forge.model.FModel;
import forge.util.IgnoringXStream; import forge.util.IgnoringXStream;
import org.apache.commons.lang3.StringUtils;
import java.io.*;
import java.nio.file.Files;
import java.util.Map;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
public class TournamentIO { public class TournamentIO {
/** Prompt in text field for new (unsaved) built gauntlets. */ /** Prompt in text field for new (unsaved) built gauntlets. */
@@ -130,11 +123,12 @@ public class TournamentIO {
} }
private static void savePacked(final XStream xStream0, final TournamentData gd0) throws IOException { private static void savePacked(final XStream xStream0, final TournamentData gd0) throws IOException {
final BufferedOutputStream bout = new BufferedOutputStream(new FileOutputStream(getTournamentFile(gd0))); try(final BufferedOutputStream bout = new BufferedOutputStream(Files.newOutputStream(getTournamentFile(gd0).toPath()));
final GZIPOutputStream zout = new GZIPOutputStream(bout); final GZIPOutputStream zout = new GZIPOutputStream(bout);
) {
xStream0.toXML(gd0, zout); xStream0.toXML(gd0, zout);
zout.flush(); zout.flush();
zout.close(); }
} }
private static class DeckSectionToXml implements Converter { private static class DeckSectionToXml implements Converter {

View File

@@ -11,6 +11,7 @@ import java.io.*;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.URL; import java.net.URL;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.nio.file.Paths;
import java.util.Enumeration; import java.util.Enumeration;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@@ -107,31 +108,31 @@ public class GuiDownloadZipService extends GuiDownloadService {
progressBar.setMaximum(100); progressBar.setMaximum(100);
// input stream to read file - with 8k buffer
final InputStream input = new BufferedInputStream(conn.getInputStream(), 8192);
FileUtil.ensureDirectoryExists(destFolder); FileUtil.ensureDirectoryExists(destFolder);
// output stream to write file
final String destFile = destFolder + filename; final String destFile = destFolder + filename;
final OutputStream output = new FileOutputStream(destFile);
// input stream to read file - with 8k buffer
// output stream to write file
try(InputStream input = new BufferedInputStream(conn.getInputStream(), 8192);
OutputStream output = java.nio.file.Files.newOutputStream(Paths.get(destFile))) {
int count; int count;
long total = 0; long total = 0;
final byte[] data = new byte[1024]; final byte[] data = new byte[1024];
while ((count = input.read(data)) != -1) { while ((count = input.read(data)) != -1) {
if (cancel) { break; } if (cancel) {
break;
}
total += count; total += count;
if (progressBar != null) if (progressBar != null)
progressBar.setValue((int)(100 * total / contentLength)); progressBar.setValue((int) (100 * total / contentLength));
output.write(data, 0, count); output.write(data, 0, count);
} }
output.flush(); output.flush();
output.close(); }
input.close();
if (cancel) { if (cancel) {
new File(destFile).delete(); new File(destFile).delete();

View File

@@ -1,6 +1,9 @@
package forge.util; package forge.util;
import java.io.*; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry; import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream; import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream; import java.util.zip.ZipOutputStream;
@@ -11,11 +14,11 @@ import java.util.zip.ZipOutputStream;
public class ZipUtil { public class ZipUtil {
public static String backupAdvFile = "forge.adv"; public static String backupAdvFile = "forge.adv";
public static void zip(File source, File dest, String name) throws IOException { public static void zip(File source, File dest, String name) throws IOException {
try(
FileOutputStream fos = new FileOutputStream(dest.getAbsolutePath() + File.separator + name); FileOutputStream fos = new FileOutputStream(dest.getAbsolutePath() + File.separator + name);
ZipOutputStream zipOut = new ZipOutputStream(fos); ZipOutputStream zipOut = new ZipOutputStream(fos)) {
zipFile(source, source.getName(), zipOut); zipFile(source, source.getName(), zipOut);
zipOut.close(); }
fos.close();
} }
private static void zipFile(File fileToZip, String fileName, ZipOutputStream zipOut) throws IOException { private static void zipFile(File fileToZip, String fileName, ZipOutputStream zipOut) throws IOException {
@@ -69,12 +72,12 @@ public class ZipUtil {
// write file content // write file content
val.append(" * "). append(newFile.getName()).append("\n"); val.append(" * "). append(newFile.getName()).append("\n");
FileOutputStream fos = new FileOutputStream(newFile); try(FileOutputStream fos = new FileOutputStream(newFile)) {
int len; int len;
while ((len = zis.read(buffer)) > 0) { while ((len = zis.read(buffer)) > 0) {
fos.write(buffer, 0, len); fos.write(buffer, 0, len);
} }
fos.close(); }
} }
zipEntry = zis.getNextEntry(); zipEntry = zis.getNextEntry();
} }