Je fais actuellement un projet en java pour le collage et je me suis attaqué à un petit problème et j'espère que l'un de vous pourra mettre en lumière ce que je ne peux pas voir. Voici le code que j'utilise pour écrire un tableau [] dans un fichier. Le tableau lui-même est un [100]. Le problème que j'ai, c'est que je ne peux pas comprendre ce que la pile vous dit ou comment résoudre le problème et l'arrêter. Le fichier qu'il appelle est déjà créé par une autre classe et j'ai vérifié pour le confirmer

public void writeGridToFile() throws IOException {
            FileWriter fw = new FileWriter("D:/GridArrayFile.txt");
            try {
                for(int i = 0; i < 100; i++){
                    BufferedWriter bw = new BufferedWriter(fw);
                    bw.write(GridArray[i]);
                    bw.close();
                }
            }

            catch (IOException e) {
                e.printStackTrace();
                System.out.println("Error");
            }
            finally {
                //TODO
                System.out.println("Finished");
            }
    }

Ceci est la pile d'exceptions en cours d'impression

java.io.IOException: Stream closed
at sun.nio.cs.StreamEncoder.ensureOpen(Unknown Source)
at sun.nio.cs.StreamEncoder.write(Unknown Source)
at java.io.OutputStreamWriter.write(Unknown Source)
at java.io.BufferedWriter.flushBuffer(Unknown Source)
at java.io.BufferedWriter.close(Unknown Source)
at playgame.writeGridToFile(playgame.java:195)
at playgame.CreateFile(playgame.java:183)
at playgame$1.actionPerformed(playgame.java:73)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

J'espère que vous pouvez trouver le problème, également en note latérale si c'est un simple et rapide laissez-moi partir Je n'utilise que java depuis environ 1 an et demi et c'est encore très nouveau pour moi.

1
Michael Quinn 21 avril 2017 à 13:53

3 réponses

Meilleure réponse
public void writeGridToFile() throws IOException {
        FileWriter fw = new FileWriter("D:/GridArrayFile.txt");
        BufferedWriter bw = new BufferedWriter(fw);
        try {
           for(int i = 0; i < 100; i++){
                bw.write(GridArray[i]);
           }
        }
        catch (IOException e) {
                e.printStackTrace();
                System.out.println("Error");
        }
        finally {
                bw.close();
                System.out.println("Finished");
        }
}
1
ShahzadIftikhar 21 avril 2017 à 10:59

Merci pour l'aide, tout le monde ci-dessous est le code qui était la solution fixe à ce problème.

public void writeGridToFile() throws IOException {
    try(BufferedWriter bw = new BufferedWriter(new FileWriter("D:/GridArrayFile.txt"))) {
        for(int i = 0; i < 100; i++){
            bw.write(Integer.toString(GridArray[i]));
       }
        bw.flush();
     }
     catch (IOException e) {
            e.printStackTrace();
            System.out.println("Error");
     }
     finally {
            System.out.println("Finished");
     }
}
0
Michael Quinn 21 avril 2017 à 11:14

La déclaration à l'intérieur de votre boucle:

bw.close();

Fermera également FileWriter fw. Vous cherchez peut-être quelque chose comme ça?

public static void main(String[] args)
throws IOException {
    int[] gridArray = new int[] { 'H', 'u', 'r', 'r', 'a', 'y', '!' };
    try (FileWriter fw = new FileWriter("gridArrayFile.txt")) {
        BufferedWriter bw = new BufferedWriter(fw);
        for (int i = 0; i < gridArray.length; i++) {
            bw.write(gridArray[i]);
        }
        bw.flush();
    } catch (IOException e) {
        e.printStackTrace();
        System.out.println("Error");
    } finally {
        System.out.println("Finished");
    }
}

J'ai fait et exécuté et ensuite le fichier gridArrayFile.txt a été créé et contenait la chaîne Hurray!.

0
Harmlezz 21 avril 2017 à 11:13