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

View File

@@ -1,31 +1,5 @@
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.gui.FThreads;
import forge.gui.SOverlayUtils;
@@ -42,6 +16,19 @@ import forge.util.maps.MapOfLists;
import forge.view.FFrame;
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.
*
@@ -297,12 +284,9 @@ public final class SLayoutIO {
}
final XMLOutputFactory out = XMLOutputFactory.newInstance();
FileOutputStream fos = null;
XMLEventWriter writer = null;
try {
try(FileOutputStream fos = new FileOutputStream(fWriteTo);) {
String layoutSerial = getLayoutSerial(file.defaultLoc);
fos = new FileOutputStream(fWriteTo);
writer = out.createXMLEventWriter(fos);
final List<DragCell> cells = FView.SINGLETON_INSTANCE.getDragCells();
@@ -337,15 +321,12 @@ public final class SLayoutIO {
}
writer.flush();
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.
e.printStackTrace();
} finally {
if ( writer != null )
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.localinstance.properties.ForgeConstants;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.file.Files;
public class LibGDXImageFetcher extends ImageFetcher {
@Override
@@ -45,11 +45,11 @@ public class LibGDXImageFetcher extends ImageFetcher {
FileHandle destFile = new FileHandle(newdespath + ".tmp");
System.out.println(newdespath);
destFile.parent().mkdirs();
OutputStream out = new FileOutputStream(destFile.file());
// Conversion to JPEG will be handled differently depending on the platform
Forge.getDeviceAdapter().convertToJPEG(is, out);
is.close();
out.close(); //close outputstream before destfile.moveto so it can delete the tmp file internally
try(OutputStream out = Files.newOutputStream(destFile.file().toPath())) {
// Conversion to JPEG will be handled differently depending on the platform
Forge.getDeviceAdapter().convertToJPEG(is, out);
is.close();
}
destFile.moveTo(new FileHandle(newdespath));
System.out.println("Saved image to " + newdespath);

View File

@@ -1,18 +1,12 @@
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.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.
@@ -28,7 +22,6 @@ public class CardThemedLDAIO {
try (FileOutputStream f = new FileOutputStream(file);
ObjectOutputStream s = new ObjectOutputStream(f)){
s.writeObject(lda);
s.close();
} catch (IOException e) {
System.out.println("Error writing matrix data: " + e);
}

View File

@@ -1,23 +1,5 @@
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.converters.ConversionException;
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.NullPermission;
import com.thoughtworks.xstream.security.PrimitiveTypePermission;
import forge.deck.CardPool;
import forge.deck.Deck;
import forge.deck.DeckSection;
@@ -37,6 +18,14 @@ import forge.item.PaperCard;
import forge.localinstance.properties.ForgeConstants;
import forge.model.FModel;
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 {
/** 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 {
final BufferedOutputStream bout = new BufferedOutputStream(new FileOutputStream(getGauntletFile(gd0)));
final GZIPOutputStream zout = new GZIPOutputStream(bout);
xStream0.toXML(gd0, zout);
zout.flush();
zout.close();
try(final BufferedOutputStream bout = new BufferedOutputStream(Files.newOutputStream(getGauntletFile(gd0).toPath()));
final GZIPOutputStream zout = new GZIPOutputStream(bout)) {
xStream0.toXML(gd0, zout);
zout.flush();
}
}
private static class DeckSectionToXml implements Converter {

View File

@@ -17,36 +17,6 @@
*/
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.converters.Converter;
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.NullPermission;
import com.thoughtworks.xstream.security.PrimitiveTypePermission;
import forge.card.CardEdition;
import forge.deck.CardPool;
import forge.deck.Deck;
@@ -66,29 +35,31 @@ import forge.gamemodes.quest.QuestController;
import forge.gamemodes.quest.QuestEventDraft;
import forge.gamemodes.quest.QuestMode;
import forge.gamemodes.quest.bazaar.QuestItemType;
import forge.gamemodes.quest.data.DeckConstructionRules;
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.*;
import forge.gamemodes.quest.data.QuestPreferences.QPref;
import forge.gamemodes.quest.data.StarRating;
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.item.*;
import forge.localinstance.properties.ForgeConstants;
import forge.model.FModel;
import forge.util.FileUtil;
import forge.util.IgnoringXStream;
import forge.util.ItemPool;
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>
@@ -452,19 +423,20 @@ public class QuestDataIO {
}
private static void savePacked(final String f, final XStream xStream, final QuestData qd) throws IOException {
final BufferedOutputStream bout = new BufferedOutputStream(new FileOutputStream(f));
final GZIPOutputStream zout = new GZIPOutputStream(bout);
xStream.toXML(qd, zout);
zout.flush();
zout.close();
try(
final BufferedOutputStream bout = new BufferedOutputStream(Files.newOutputStream(Paths.get(f)));
final GZIPOutputStream zout = new GZIPOutputStream(bout)) {
xStream.toXML(qd, zout);
zout.flush();
}
}
@SuppressWarnings("unused") // used only for debug purposes
private static void saveUnpacked(final String f, final XStream xStream, final QuestData qd) throws IOException {
final BufferedOutputStream boutUnp = new BufferedOutputStream(new FileOutputStream(f));
xStream.toXML(qd, boutUnp);
boutUnp.flush();
boutUnp.close();
try(final BufferedOutputStream boutUnp = new BufferedOutputStream(Files.newOutputStream(Paths.get(f)))) {
xStream.toXML(qd, boutUnp);
boutUnp.flush();
}
}
private static class GameFormatQuestToXml implements Converter {

View File

@@ -1,18 +1,5 @@
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.converters.Converter;
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.NullPermission;
import com.thoughtworks.xstream.security.PrimitiveTypePermission;
import forge.deck.CardPool;
import forge.item.PaperCard;
import forge.localinstance.properties.ForgeConstants;
import forge.model.FModel;
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 {
/** 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 {
final BufferedOutputStream bout = new BufferedOutputStream(new FileOutputStream(getTournamentFile(gd0)));
final GZIPOutputStream zout = new GZIPOutputStream(bout);
xStream0.toXML(gd0, zout);
zout.flush();
zout.close();
try(final BufferedOutputStream bout = new BufferedOutputStream(Files.newOutputStream(getTournamentFile(gd0).toPath()));
final GZIPOutputStream zout = new GZIPOutputStream(bout);
) {
xStream0.toXML(gd0, zout);
zout.flush();
}
}
private static class DeckSectionToXml implements Converter {

View File

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

View File

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