Secciones

Artículos para tus primeros pasos

Si estás empezando a introducirte en el mundo de Groovy y Grails, no te pierdas nuestros artículos básicos: 

Entrevistas con los expertos
 

Los protagonistas te cuentan de qué van los proyectos más importantes del mundo Groovy:


Un proyecto de:
ImaginaWorks
Campus Escuela de Groovy

Groovy: primeros pasos

El método canWrite y ficheros que no existen

casiano - martes 23/03/2010

Hola,

Encuentro la conducta que sigue algo extraña. El método canWrite() cuando un fichero no existe dice que no se puede escribir. Véase el siguiente programa:

$ cat canWrite.groovy

#!/usr/bin/env groovy
target = new File(args[0])
if (!target.canWrite()) {
  println "Can't write in $target!"
}
target.write("Hello world!")
if (target.canWrite()) {
  println "Can write in $target!"
}

Cuando se ejecuta con argumento un fichero que no existe esta es la conducta:

$ ./canWrite.groovy doesnotexits.txt
Can't write in doesnotexits.txt!
can write in doesnotexits.txt!

 No sería mas lógico que devolviera "true" sobre un fichero que no existe? De hecho, despues que se escribe sobre el fichero el intérprete pasa a admitir que es posible escribir en el fichero.  El programa Java equivalente parece hacer precisamente eso ...

 Estas son las versiones con que estoyr trabajando:

$ groovy -v
Groovy Version: 1.6.5 JVM: 1.6.0_0
 

¿Estoy haciendo algo mal? Alguien puede ayudarme?

 Gracias!

 P.S. ¿Cómo puedo hacer que el código salga "verbatim" cuando hago un post en este foro?

 

 

Re: El método canWrite y ficheros que no existen

Nacho - miércoles 24/03/2010

Hola,

he hecho este pequeño programa en Java:

import java.io.*;

public class Test{
    public static void main(String[] args){
        String path = "noexiste.txt";
        File f = new File(path);
        System.out.println(f.canWrite());   
    }
}

 

Luego el equivalente en Groovy:

def path = "noexiste.txt";
File f = new File(path);
println(f.canWrite());

en ambos casos, el comportamiento es el mismo: escribe "false" en consola. El comportamiento de canWrite está claramente descrito en la documentación

"true if and only if the file system actually contains a file denoted by this abstract pathname and the application is allowed to write to the file; false otherwise."

A mí sí me parece lógico: no puedes escribir sobre un archivo que no existe. Cuando haces una llamada al método write de Groovy, éste intentará crear el fichero si no existe,  pero no  está asegurado que pueda hacerlo (podrías no tener permisos de escritura en la carpeta actual).

Re: El método canWrite y ficheros que no existen

casiano - miércoles 24/03/2010
Gracias!
Responder al hilo | Volver al foro "Groovy: primeros pasos" | Volver a los foros