diff --git a/forge-core/src/main/java/forge/util/FileUtil.java b/forge-core/src/main/java/forge/util/FileUtil.java index a969b6367b5..40c463a106a 100644 --- a/forge-core/src/main/java/forge/util/FileUtil.java +++ b/forge-core/src/main/java/forge/util/FileUtil.java @@ -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; - /** *

* 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) { diff --git a/forge-gui-desktop/src/main/java/forge/gui/framework/SLayoutIO.java b/forge-gui-desktop/src/main/java/forge/gui/framework/SLayoutIO.java index c6dbe1e04d4..803407515b0 100644 --- a/forge-gui-desktop/src/main/java/forge/gui/framework/SLayoutIO.java +++ b/forge-gui-desktop/src/main/java/forge/gui/framework/SLayoutIO.java @@ -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 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) {} } } diff --git a/forge-gui-mobile/src/forge/util/LibGDXImageFetcher.java b/forge-gui-mobile/src/forge/util/LibGDXImageFetcher.java index 40e0be7d81a..6cfbebe47f6 100644 --- a/forge-gui-mobile/src/forge/util/LibGDXImageFetcher.java +++ b/forge-gui-mobile/src/forge/util/LibGDXImageFetcher.java @@ -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); diff --git a/forge-gui/src/main/java/forge/deck/io/CardThemedLDAIO.java b/forge-gui/src/main/java/forge/deck/io/CardThemedLDAIO.java index 2de669218d3..c1a61e9a144 100644 --- a/forge-gui/src/main/java/forge/deck/io/CardThemedLDAIO.java +++ b/forge-gui/src/main/java/forge/deck/io/CardThemedLDAIO.java @@ -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); } diff --git a/forge-gui/src/main/java/forge/gamemodes/gauntlet/GauntletIO.java b/forge-gui/src/main/java/forge/gamemodes/gauntlet/GauntletIO.java index 97b6b047c26..04f047e4592 100644 --- a/forge-gui/src/main/java/forge/gamemodes/gauntlet/GauntletIO.java +++ b/forge-gui/src/main/java/forge/gamemodes/gauntlet/GauntletIO.java @@ -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 { diff --git a/forge-gui/src/main/java/forge/gamemodes/quest/io/QuestDataIO.java b/forge-gui/src/main/java/forge/gamemodes/quest/io/QuestDataIO.java index 3b0f28c4aa5..113156bab83 100644 --- a/forge-gui/src/main/java/forge/gamemodes/quest/io/QuestDataIO.java +++ b/forge-gui/src/main/java/forge/gamemodes/quest/io/QuestDataIO.java @@ -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; /** *

@@ -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 { diff --git a/forge-gui/src/main/java/forge/gamemodes/tournament/TournamentIO.java b/forge-gui/src/main/java/forge/gamemodes/tournament/TournamentIO.java index dd980cfc937..aed83a763b4 100644 --- a/forge-gui/src/main/java/forge/gamemodes/tournament/TournamentIO.java +++ b/forge-gui/src/main/java/forge/gamemodes/tournament/TournamentIO.java @@ -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 { diff --git a/forge-gui/src/main/java/forge/gui/download/GuiDownloadZipService.java b/forge-gui/src/main/java/forge/gui/download/GuiDownloadZipService.java index 3185504477d..de6097de8d2 100644 --- a/forge-gui/src/main/java/forge/gui/download/GuiDownloadZipService.java +++ b/forge-gui/src/main/java/forge/gui/download/GuiDownloadZipService.java @@ -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; diff --git a/forge-gui/src/main/java/forge/util/ZipUtil.java b/forge-gui/src/main/java/forge/util/ZipUtil.java index 9018d8ebd02..b6c465a7785 100644 --- a/forge-gui/src/main/java/forge/util/ZipUtil.java +++ b/forge-gui/src/main/java/forge/util/ZipUtil.java @@ -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(); }