FileOutputStream (Acceso Denegado)

Iniciado por alexmacan, 9 Septiembre 2010, 19:18 PM

0 Miembros y 1 Visitante están viendo este tema.

alexmacan

Buenas, espero que me podais echar una mano con este problemilla que tengo, he creado/conseguido/modificado un metodo que dado una ruta, te detecta si es una carpeta o un archivo, si es carpeta te crea la carpeta y te copia su contenido en la ruta de destino, si es una archivo copiar el archivo en la ruta de destino.

El problema segun yo creo es Windows 7 que no me da permisos para escribir, y eso que he probado varias carpetas de destino.

Falla cuando intenta crear: OutputStream out = new FileOutputStream(destino);
¿hay alguna otra manera o solucion?

el error obtenido por consola es el siguiente:

09-sep-2010 18:50:05 backup.Backup jButton1ActionPerformed
GRAVE: null
java.io.FileNotFoundException: C:\Copia (Acceso denegado)
       at java.io.FileOutputStream.open(Native Method)
       at java.io.FileOutputStream.<init>(FileOutputStream.java:179)
       at java.io.FileOutputStream.<init>(FileOutputStream.java:131)
       at backup.Metodos.copyArchivo(Metodos.java:86)
       at backup.Metodos.copyDirectorio(Metodos.java:71)
       at backup.Metodos.copiarCarpeta(Metodos.java:43)
       at backup.Backup.jButton1ActionPerformed(Backup.java:283)
       at backup.Backup.access$100(Backup.java:30)
       at backup.Backup$2.actionPerformed(Backup.java:99)
       at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
       at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
       at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
       at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
       at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
       at java.awt.Component.processMouseEvent(Component.java:6263)
       at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
       at java.awt.Component.processEvent(Component.java:6028)
       at java.awt.Container.processEvent(Container.java:2041)
       at java.awt.Component.dispatchEventImpl(Component.java:4630)
       at java.awt.Container.dispatchEventImpl(Container.java:2099)
       at java.awt.Component.dispatchEvent(Component.java:4460)
       at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
       at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
       at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
       at java.awt.Container.dispatchEventImpl(Container.java:2085)
       at java.awt.Window.dispatchEventImpl(Window.java:2478)
       at java.awt.Component.dispatchEvent(Component.java:4460)
       at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
       at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
       at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
       at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
       at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
       at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
       at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)


Un Saludo y gracias.

danielo-

Es raro que no te deje crear carpetas directo en C, aquel dia tuve un problema parecido al crear un archivo, no me dejaba, pero lo solucione creando una carpeta y metiendo los archivos desntro, mmm... checa si estas loguiado como admin en windows...
Aunque checando tu codigo... veo que intentas crear una carpeta con el fileOutputSream, no se si ese sea tu error, intenta con este code
Código (java) [Seleccionar]


import java.io.FileReader;
import java.io.FileWriter;
import java.io.BufferedReader;
import java.io.File;

class Main{

public static void main(String arg[]){
try{

java.io.File dir = new File("C:\\destino");
dir.mkdir();
}
catch(Exception e){
e.printStackTrace();
}
}
}


Saludos!

alexmacan

Gracias por tu respuesta danyelk_6u5 pero el codigo que me facilitas creo que es semejante al mio, estoy logeado como administrador y la verdad que nose que mas probar, voy a postear el metodo que uso al completo, pero aun asi creo que no es el problema, sino los permisos.

  public static void copyDirectorio(File srcDir, File dstDir) throws IOException {
        if (srcDir.isDirectory()) {
            if (!dstDir.exists()) {
                dstDir.mkdirs();
               }

            String[] children = srcDir.list();
            for (int i=0; i<children.length; i++) {
                copyDirectorio(new File(srcDir, children),
                    new File(dstDir, children));
            }
        } else {
            copyArchivo(srcDir, dstDir);
        }
    }

    /**
     * Copia un solo archivo
     */
    public static void copyArchivo(File src, File dst) throws IOException {


        InputStream in = new FileInputStream(src);

        OutputStream out = new FileOutputStream(dst);
       


        byte[] buf = new byte[1024];
        int len;
        while ((len = in.read(buf)) > 0) {
            out.write(buf, 0, len);
        }
        in.close();
        out.close();
    }

Debci

tiene quizás tu maquina virtual por algun motivo específico permisos de ejecución restringidos?

Saludos

alexmacan

SI, eso tambien lo habia comprobado, el caso es que lo e probado en otro windows 7 y en un XP y sigue tirando el mismo error, el comportamiento que tiene el programa es el siguiente:

Si tiene que copiar una carpeta, te copia el contenido(carpetas y archivos) en el destino raiz, en lugar de crear la nueva carpeta en el destino raiz y copiar dentro el contenido.

Si lo que va a copiar es un archivo nisiquiera lo copia.

Observando la consola es donde manda ese error por cada archivo o carpeta que quiere copiar.

Alguna idea de como solucionar esto  :huh:

Muchas gracias por vuestra atencion