Resumen de flujo de caracteres Java IO-2

Inserte la descripción de la imagen aquí

Secuencia de personajes

Cuando se utiliza una secuencia de bytes para leer texto, especialmente cuando se encuentran caracteres chinos, es posible que no se muestre el carácter completo. Esto se debe a que un carácter chino puede ocupar múltiples bytes de almacenamiento.
Java proporciona algunas clases de secuencia de caracteres. La unidad lee y escribe datos, especializándose en archivos de texto

Flujo de entrada de caracteres [Lector]

La clase abstracta java.io.Reader representa la superclase de todas las clases utilizadas para leer secuencias de caracteres. Puede leer información de caracteres en la memoria y define métodos comunes básicos de secuencias de entrada de caracteres.

Inserte la descripción de la imagen aquí

Secuencia de entrada de caracteres de archivo [FileReader]

Lea los datos en el archivo del disco duro en la memoria en modo de caracteres

¡La siguiente imagen es su constructor
Inserte la descripción de la imagen aquí
! ! ! Cómo usar! ! !

public class Demo01Reader {

    public static void main(String[] args) throws IOException {
        Reader reader = new FileReader("F:\\cccc.txt");
        // 存储读取1024个字符
        char[] chars = new char[1024];
        int len = 0;
        // 当读到文件结尾时候  len==-1
        while ((len = reader.read(chars)) != -1) {
            System.out.println(new String(chars, 0, len));
        }
        reader.close();
    }
}

! ! ! ¡El resultado es correcto! ! !

Inserte la descripción de la imagen aquí

Flujo de salida de caracteres [Escritor]

La clase abstracta java.io.Writer representa la superclase de todas las clases utilizadas para escribir secuencias de caracteres y puede leer información de caracteres en la memoria, definiendo los métodos comunes básicos de secuencias de entrada de caracteres

Inserte la descripción de la imagen aquí

Secuencia de salida de caracteres de archivo [FileWriter]

La clase java.io.FileWriter es una clase conveniente para escribir caracteres en un archivo, utilizando la codificación de caracteres predeterminada del sistema y el búfer de bytes predeterminado durante la construcción

La siguiente imagen es su constructor.

Inserte la descripción de la imagen aquí
Puntos de uso del flujo de salida de caracteres:

  • Cree un objeto FileWriter, enlace el destino para escribir datos en el constructor
  • Utilice el escritor de métodos en FileWriter para escribir datos en el búfer de memoria (el proceso de convertir caracteres a bytes)
  • Utilice el método flush en FileWriter para vaciar los datos en el búfer de memoria al archivo
  • Liberar recursos (antes de esto, los datos en el búfer de memoria se actualizarán al archivo)

Como usar

public class Demo02Writer {

    public static void main(String[] args) throws IOException {

        Writer writer = new FileWriter("F:\\cccc.txt");
        writer.write("囧囧是世界上最漂亮的女孩");
        writer.close();

    }
}

Escriba correctamente y reemplace el contenido del archivo anterior

Inserte la descripción de la imagen aquí

Cerrado y renovado

Debido al búfer incorporado, si no cierra el flujo de salida, no puede escribir caracteres en el archivo, pero el objeto de flujo cerrado no puede continuar escribiendo datos.
Si queremos escribir datos, y otra tecnología usa flujos, necesitamos método de descarga

  • vaciar: vaciar el búfer, el objeto continuo puede seguir usándose
  • cerrar: actualice el búfer primero, luego notifique al sistema para liberar recursos, el objeto de flujo ya no se puede usar
public class Demo02Writer {

    public static void main(String[] args) throws IOException {

        Writer writer = new FileWriter("F:\\cccc.txt");
        writer.write("囧囧是世界上最漂亮的女孩");
        writer.flush();
        writer.write("囧囧是世界上最漂亮的女孩-2");
        writer.close();

    }
}

Inserte la descripción de la imagen aquí

Nota: La primera llamada al método flush () forzará a que los datos del búfer se escriban en el archivo. ¡Después de llamar al cierre, no puede continuar escribiendo datos! ! !

Continúa escribiendo y envolviendo

¡Similar a FileOutputStream, hay un constructor booleano
verdadero para agregar falso para no agregar
Inserte la descripción de la imagen aquí
! ! ! Código en! ! !

public class Demo02Writer {

    public static void main(String[] args) throws IOException {

        Writer writer = new FileWriter("F:\\cccc.txt", true);
        writer.write("囧囧是世界上最漂亮的女孩" + "\r\n");
        writer.flush();
        writer.write("————囧囧是世界上最豆的女孩!" + "\r\n");
        writer.close();

    }
}

! ! ! ¡Se adjunta el resultado! ! !

Inserte la descripción de la imagen aquí

jdk 9 contra jdk 7

Sabemos que el método de escritura de jdk7 se puede usar probar ... con ... recurso, no se tratará aquí. Es muy simple.
A continuación, veamos el nuevo método de escritura de jdk 9.

! ! ! ¡El código anterior sigue siendo un ejemplo de copia de archivos! ! !

public class Demo05FileInputStream {

    public static void main(String[] args) throws FileNotFoundException {
        FileInputStream fis = new FileInputStream("F:\\cccc.txt");
        FileOutputStream fos = new FileOutputStream("F:\\dddd.txt");

		// jdk 9 的新语法,支持将流放入圆括号中,省略了finally关闭流的操作
        try (fis; fos) {
            int len = 0;
            byte[] bytes = new byte[1024];
            while ((len = fis.read(bytes)) != -1) {
                fos.write(bytes, 0, len);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("复制成功");

    }
}
Publicado 24 artículos originales · elogiado 33 · visitas 2391

Supongo que te gusta

Origin blog.csdn.net/weixin_41241629/article/details/104336002
Recomendado
Clasificación