Escribir un archivo

JavaJavaBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderemos cómo escribir datos en un archivo utilizando el lenguaje de programación Java. Escribir datos en un archivo puede ser muy útil cuando necesitas almacenar los datos generados por tu programa para su uso futuro.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/FileandIOManagementGroup(["File and I/O Management"]) java/FileandIOManagementGroup -.-> java/files("Files") java/FileandIOManagementGroup -.-> java/create_write_files("Create/Write Files") java/FileandIOManagementGroup -.-> java/io("IO") java/FileandIOManagementGroup -.-> java/nio("NIO") subgraph Lab Skills java/files -.-> lab-117457{{"Escribir un archivo"}} java/create_write_files -.-> lab-117457{{"Escribir un archivo"}} java/io -.-> lab-117457{{"Escribir un archivo"}} java/nio -.-> lab-117457{{"Escribir un archivo"}} end

Abrir/Crear un archivo

El primer paso es abrir o crear un archivo al que queremos escribir los datos. Crearemos un nuevo archivo llamado output.txt en el directorio ~/project.

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class Main {
    public static void main(String[] args) {
        Path path = Paths.get("~/project/output.txt");
    }
}

Escribir una cadena en un archivo

Ahora que tenemos nuestro archivo abierto, podemos escribir una cadena en él. Esto se hace utilizando el método Files.write().

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.charset.StandardCharsets;

public class Main {
    public static void main(String[] args) throws IOException {
        Path path = Paths.get("~/project/output.txt");
        String content = "This is some text that we want to write to the file";

        Files.write(path, content.getBytes());
    }
}

Aquí, estamos escribiendo una cadena en el archivo convirtiéndola a bytes y pasándola al método Files.write(). Tenga en cuenta que necesitamos usar el método getBytes() para convertir la cadena a bytes.

Para ejecutar el código anterior en su terminal, primero, debe navegar hasta el directorio de su proyecto en la terminal. Luego, ejecute el siguiente comando:

javac Main.java && java Main

Escribir una lista de cadenas en un archivo

También podemos escribir una lista de cadenas en el archivo utilizando el método Files.write(), como se muestra a continuación:

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) throws IOException {
        Path path = Paths.get("~/project/output.txt");
        List<String> lines = Arrays.asList("This is line 1", "This is line 2", "This is line 3");

        Files.write(path, lines, StandardCharsets.UTF_8);
    }
}

Aquí, estamos escribiendo una lista de cadenas en el archivo. Tenga en cuenta que estamos utilizando una versión sobrecargada del método Files.write() que toma una lista de cadenas como parámetro.

Para ejecutar el código anterior para escribir una lista de cadenas en el archivo, primero, debe navegar hasta el directorio de su proyecto en la terminal. Luego, ejecute el siguiente comando:

javac Main.java && java Main

Anexar a un archivo

Si desea escribir datos en un archivo sin sobrescribir los datos existentes en el archivo, puede usar la opción StandardOpenOption.APPEND al abrir el archivo. Esto anexará cualquier nuevo dato al final del archivo.

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.List;
import java.nio.file.StandardOpenOption;

public class Main {
    public static void main(String[] args) throws IOException {
        Path path = Paths.get("~/project/output.txt");
        List<String> lines = Arrays.asList("This is line 4", "This is line 5", "This is line 6");

        Files.write(path, lines, StandardCharsets.UTF_8, StandardOpenOption.APPEND);
    }
}

Aquí, hemos agregado la opción StandardOpenOption.APPEND al método Files.write(), lo que le indica a Java que anexe nuevos datos al final del archivo, en lugar de sobrescribir cualquier dato existente.

Para ejecutar la operación de anexado, primero, debe navegar hasta el directorio de su proyecto en la terminal. Luego, ejecute el siguiente comando:

javac Main.java && java Main

Cerrar el archivo

Finalmente, necesitamos cerrar el archivo utilizando el método Files.close(). Esto asegurará de que cualquier dato en búfer se escriba en el archivo antes de cerrarlo.

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.List;
import java.nio.file.StandardOpenOption;

public class Main {
    public static void main(String[] args) throws IOException {
        Path path = Paths.get("~/project/output.txt");
        String content = "This is some text that we want to write to the file";

        Files.write(path, content.getBytes());
        Files.write(path, System.lineSeparator().getBytes(), StandardOpenOption.APPEND);
        Files.write(path, "This is a new line".getBytes(), StandardOpenOption.APPEND);

        Files.close();
    }
}

请注意,在实际代码中,Files.close() 应该使用 try-with-resources 语句来确保文件正确关闭,上述代码只是为了展示关闭文件的操作,实际使用时应修正为正确的写法。例如:

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.List;
import java.nio.file.StandardOpenOption;

public class Main {
    public static void main(String[] args) throws IOException {
        Path path = Paths.get("~/project/output.txt");
        String content = "This is some text that we want to write to the file";

        try (var writer = Files.newBufferedWriter(path, StandardCharsets.UTF_8)) {
            writer.write(content);
            writer.write(System.lineSeparator());
            writer.write("This is a new line");
        }
    }
}

这样可以确保在代码块结束时文件会自动关闭,即使发生异常也能保证资源得到正确释放。

Resumen

En este laboratorio, hemos aprendido cómo escribir datos en un archivo utilizando la clase Files de Java. Hemos visto cómo escribir una cadena en un archivo, escribir una lista de cadenas en un archivo, anexar a un archivo y cerrar un archivo. Esperamos que ahora puedas escribir un archivo con facilidad con la ayuda de la clase Files de Java.