Java AccessControlException: Accès refusé lors de l'écriture


Lors de la lecture d'un .fichier csv je n'ai aucun problème. Mais à la fin du code, lorsque j'essaie d'y écrire une nouvelle valeur, je reçois une exception d'accès refusé et je ne sais pas vraiment pourquoi. Quelqu'un peut-il expliquer ce qui pourrait causer cela?

private Path highScoreFile = Paths.get("/Applications/JavaFinalAssignment/highscore.csv");
public String checkhighScore()
{

try{
    InputStream input = new BufferedInputStream(Files.newInputStream(highScoreFile));
    BufferedReader reader = new BufferedReader(new InputStreamReader(input));
    String s = "";
    String delimiter = ",";
    s = reader.readLine();

    while(s!= null)
    {
        scoreArray = s.split(delimiter);    
        highScoreName = scoreArray[0];
        highScoreNum = Integer.parseInt(scoreArray[1]);         
        s = reader.readLine();
    }
    reader.close();

    }
    catch(Exception e)
    {
        JOptionPane.showMessageDialog(null, "ERROR: " + e);
    }
    String scoreReturn = (scoreArray[0] + " " + scoreArray[1]);
    return scoreReturn;
}

public void setHighScore(String name, int num)
{
    try
    {
    String s = "";
    String delimiter = ",";
    OutputStream output = new BufferedOutputStream(Files.newOutputStream(highScoreFile));
    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output));
    String numString = Integer.toString(num);
    s = name + delimiter + numString;
    writer.write(s);
    writer.close();
    }
    catch(Exception e)
    {
        JOptionPane.showMessageDialog(null, "Error saving high score file: " + e);
    }

}

MODIFIER:

Trace de pile ajoutée:

java.security.AccessControlException: access denied ("java.io.FilePermission" "/Users/Matt/Desktop/JavaFinalAssignment/highscore.csv" "write")
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:366)
at java.security.AccessController.checkPermission(AccessController.java:560)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
at java.lang.SecurityManager.checkWrite(SecurityManager.java:979)
at sun.nio.fs.UnixChannelFactory.open(UnixChannelFactory.java:240)
at sun.nio.fs.UnixChannelFactory.newFileChannel(UnixChannelFactory.java:138)
at sun.nio.fs.UnixChannelFactory.newFileChannel(UnixChannelFactory.java:150)
at sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:211)
at java.nio.file.spi.FileSystemProvider.newOutputStream(FileSystemProvider.java:430)
at java.nio.file.Files.newOutputStream(Files.java:170)
at FinalAssignment.setHighScore(FinalAssignment.java:335)
at FinalAssignment.GameOver(FinalAssignment.java:239)
at FinalAssignment.actionPerformed(FinalAssignment.java:140)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:723)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:682)
at java.awt.EventQueue$3.run(EventQueue.java:680)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:696)
at java.awt.EventQueue$4.run(EventQueue.java:694)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:693)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)
Author: user1870741, 2013-11-07

1 answers

Java.sécurité.AccessControlException: accès refusé ("java.io.FilePermission" "/Users/Mat/Desktop/JavaFinalAssignment/les meilleurs scores.csv", "écrire"

Ce n'est pas un problème d'autorisations utilisateur du système d'exploitation, c'est un problème d'autorisations Java sandbox. Vous exécutez sous un gestionnaire de sécurité et votre .le fichier de stratégie ne vous accorde pas d'autorisation d'écriture sur ce répertoire. Soit supprimer le gestionnaire de sécurité, ou peut-être signer l'application, ou ajuster votre.fichier de stratégie. Chaque fois que vous obtenez a java.security.AccessControlException cela signifie que vous n'avez pas l'autorisation nommée dans le message, dans ce cas java.io.FilePermission etc.

 1
Author: user207421, 2013-11-07 02:20:20