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.
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
! ! ! 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! ! !
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
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.
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
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();
}
}
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
! ! ! 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! ! !
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("复制成功");
}
}