Cómo escribir un archivo de texto Java


El siguiente código no produce un archivo (no puedo ver el archivo en ninguna parte). ¿Qué falta?

try {
    //create a temporary file
    String timeLog = new SimpleDateFormat("yyyyMMdd_HHmmss").format(
        Calendar.getInstance().getTime());
    File logFile=new File(timeLog);

    BufferedWriter writer = new BufferedWriter(new FileWriter(logFile));
    writer.write (string);

    //Close writer
    writer.close();
} catch(Exception e) {
    e.printStackTrace();
}
Author: Ashish Aggarwal, 2013-04-02

6 answers

Creo que sus expectativas y la realidad no coinciden (pero cuando lo hacen alguna vez;))

Básicamente, donde crees que el archivo está escrito y donde el archivo está realmente escrito no son iguales (hmmm, tal vez debería escribir una declaración if;))

public class TestWriteFile {

    public static void main(String[] args) {
        BufferedWriter writer = null;
        try {
            //create a temporary file
            String timeLog = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());
            File logFile = new File(timeLog);

            // This will output the full path where the file will be written to...
            System.out.println(logFile.getCanonicalPath());

            writer = new BufferedWriter(new FileWriter(logFile));
            writer.write("Hello world!");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // Close the writer regardless of what happens...
                writer.close();
            } catch (Exception e) {
            }
        }
    }
}

También tenga en cuenta que su ejemplo sobrescribirá cualquier archivo existente. Si desea agregar el texto al archivo, debe hacer lo siguiente:

writer = new BufferedWriter(new FileWriter(logFile, true));
 107
Author: MadProgrammer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-14 03:24:38

Me gustaría añadir un poco más a la respuesta de MadProgrammer.

En caso de escritura de varias líneas, al ejecutar el comando

writer.write(string);

Uno puede notar que los caracteres de nueva línea se omiten o se omiten en el archivo escrito aunque aparezcan durante la depuración o si el mismo texto se imprime en el terminal con,

System.out.println("\n");

Por lo tanto, todo el texto viene como un gran trozo de texto que es indeseable en la mayoría de los casos. El carácter de nueva línea puede depender de la plataforma, por lo que es mejor obtener este carácter de las propiedades del sistema java utilizando

String newline = System.getProperty("line.separator");

Y luego usando la variable de nueva línea en lugar de "\n". Esto obtendrá la salida de la manera que desee.

 16
Author: Menezes Sousa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-04 09:47:59

En java 7 ahora puede hacer

try(BufferedWriter w = ....)
{
  w.write(...);
}
catch(IOException)
{
}

Y w. close se hará automáticamente

 14
Author: guest,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-06 19:54:54

No está creando un archivo porque en realidad nunca lo creó. Hiciste un objeto para ello. Crear una instancia no crea el archivo.

File newFile = new File("directory", "fileName.txt");

Puedes hacer esto para crear un archivo:

newFile.createNewFile();

Puedes hacer esto para crear una carpeta:

newFile.mkdir();
 4
Author: smorce,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-09 22:07:53

Puede probar una biblioteca Java. FileUtils , Tiene muchas funciones que escriben en Archivos.

 0
Author: Snow,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-13 05:39:32

Funciona conmigo. Asegúrate de añadir".txt " junto a TimeLog. Lo utilicé en un programa simple abierto con Netbeans y escribe el programa en la carpeta principal (donde están las carpetas builder y src).

 0
Author: Giulio Dalicco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-22 17:27:49