Notas de estudio de Java-IO stream

1. Clase de archivo

1.1, Descripción general de la clase de archivo y método de construcción

Archivo: Es una representación abstracta de nombres de ruta de
archivos y directorios. Los archivos y directorios son Archivo (String pathname) que se pueden encapsular en objetos mediante
File //Se crea un nuevo archivo convirtiendo la cadena de nombre de ruta dada en un
archivo de instancia de nombre de ruta abstracto ( String parent,String child) //Crear una nueva instancia de archivo a partir de la cadena de nombre de ruta principal y la cadena de nombre de ruta secundario
File(File parent,String child) //Crear un nuevo archivo a partir de la cadena de nombre de ruta principal abstracto y la cadena de nombre de ruta secundario Instancia de archivo

1.2, función de creación de clase de archivo

public boolean createNewFile() Cuando no existe un archivo con este nombre, crea un nuevo archivo vacío con el nombre de esta ruta abstracta, si el archivo no existe, crea el archivo, devuelve verdadero; si el archivo existe, devuelve falso;
público boolean mkdir() crea el directorio nombrado por este nombre de ruta abstracto
public boolean mkdirs() crea el directorio nombrado por este nombre de ruta abstracto, incluidos los directorios principales requeridos pero no existentes

1.3, función de juicio y adquisición de clase de archivo

public boolean isDirectory() //Prueba si el archivo representado por el nombre de ruta abstracto es un directorio
public boolean isFile() //Prueba si el archivo representado por este nombre de ruta abstracto es un archivo
public boolean existe() //Prueba el archivo representado por este nombre de ruta abstracto ¿Existe
public String getAbsolutePath()//Devuelve la cadena de nombre de ruta absoluto de
este nombre de ruta abstracto public String getPath() Convierte este nombre de ruta abstracto en una cadena de nombre de ruta
public String getName() Devuelve el archivo representado por este nombre de ruta abstracto o el nombre de un directorio
public String[] list() Devuelve una matriz de cadenas de nombres de archivos y directorios en el directorio representado por este nombre de ruta abstracto
public File[] listFiles() Devuelve una matriz de archivos y directorios en el directorio representado por este resumen nombre de ruta Matriz de objetos de archivo

1.4, función de eliminación de clase de archivo

public boolean delete() //Eliminar el archivo o directorio representado por este nombre de ruta abstracto Ruta absoluta: nombre de ruta completo
, no se necesita información adicional para ubicar el archivo que representa

1.5, recursión

Salida recursiva: de lo contrario habrá un desbordamiento de memoria
Regla de recursividad: un problema más pequeño similar al problema original
Ejemplo: factorial recursivo

public static int fun(int n) {
    
    
		if(n == 1)
			return 1;
		else
			return n*fun(n-1);
	}
			
		int n = fun(5);//求5的阶乘
		System.out.println(n);
			

Caso: recorrer un directorio

import java.io.File;
import java.io.IOException;

public class helloworld {
    
    
	public static void main(String[] args) throws IOException{
    
    
		//遍历目录
		File file = new File("E:");
		
	
		getAllFilePath(file);	
	}	
	
	//定义一个方法,用于获取给定目录下的所有内容
	public static void getAllFilePath(File file) {
    
    
		//获取给定的File目录下所有的文件或者目录的File数组
		File[] filearray = file.listFiles();
		//遍历该file数组,得到每一个file对象
		if(filearray != null) {
    
    
			for(File f : filearray) {
    
    
				//判断该f对象是否是目录
				if(f.isDirectory()) {
    
    
					//是
					getAllFilePath(f);			
				} else{
    
    
					//不是,获取绝对路径输出再控制台
					System.out.println(f.getAbsolutePath());
				}
			}
		}
	
	}
}

2. Flujo de bytes

secuencia de entrada de bytes; secuencia de salida de bytes secuencia de
entrada de caracteres; secuencia de salida de caracteres

2.1, datos de escritura de flujo de bytes

Clase base abstracta de flujo de bytes
InputStream: esta clase abstracta es la superclase de todas las clases que representan flujos de entrada de bytes
OutputStream: esta clase abstracta es la superclase de todas las clases que representan flujos de salida de bytes
Nombre de la subclase Características: los nombres de las subclases son Use el nombre de la clase principal como sufijo del nombre de la subclase
FileOutputStream(String name): Cree un flujo de salida de archivo y escriba en el archivo con el nombre especificado
//Finalmente, todas las operaciones relacionadas con IO deben iniciar el recurso
void close();//Cerrar este flujo de salida de archivo y liberar cualquier recurso del sistema asociado con esta transmisión

2.2, 3 formas de escribir datos en flujo de bytes

void write(int b)//Escribe los bytes especificados en el flujo de salida de este archivo, un byte de datos a la vez
void write(byte[] b)//Escribe b.length bytes de la matriz de bytes especificada Esta salida de archivo flujo, escriba datos de matriz de un byte a la vez
void write(byte[] b,int off,int len)//Escriba len bytes de la matriz de bytes especificada, comenzando desde el desplazamiento hacia este flujo de salida de archivo, escribiendo parte de los datos una matriz de bytes a la vez

2.3, dos pequeños problemas de escritura de flujo de bytes

Implementar nueva línea: diferentes sistemas implementan nueva línea en línea con una
ventana diferente:\r\n
linux:\n
mac:\r
Agregar contenido:
FileOutputStream (String name, boolean append) crea una secuencia de salida de archivo y escribe el archivo con el nombre especificado; si el segundo parámetro es verdadero, los bytes se escribirán al final del archivo en lugar del principio

2.4, datos de escritura de flujo de bytes más manejo de excepciones

finalmente: proporcione un bloque finalmente para realizar todas las operaciones de limpieza durante el manejo de excepciones

2.5, datos de lectura de flujo de bytes (leer un byte de datos a la vez)

FileInputStream: Obtener bytes de entrada de un archivo en el sistema de archivos
FileInputStream(String name): Cree un FileInputStream abriendo una conexión con el archivo real nombrado por el nombre de la ruta name en el sistema de archivos
int read(); //La secuencia de entrada lee un byte de datos

Requisito: lea y procese el contenido del archivo fos.txt y envíelo a la consola

FileInputStream fis = new FileInputStream("fos.txt");
int by;
while((by = fis.read()) != -1) {
    
    
	System.out.println((char)by);
}

2.6, datos de lectura de flujo de bytes (leer datos de matriz de un byte a la vez)

FileInputStream fis = new FileInputStream("fos.txt");
			
		byte[] by = new byte[1024];//1024及其整数倍
		int len;
		while((len = fis.read(by)) != -1) {
    
    
			System.out.print(new String(by,0,len));
		}
		fis.close();	

Caso: copia la imagen

		//把E:java下的123.jpg复制到 当前目录下
		FileInputStream fis = new FileInputStream("E:\\java\\123.jpg");
		
		FileOutputStream fos = new FileOutputStream("123.jpg");
			
		byte[] by = new byte[1024];//1024及其整数倍
		int len;
		while((len = fis.read(by)) != -1) {
    
    
			fos.write(by,0,len);
		}
		fis.close();
		fos.close();

Flujo almacenado en búfer de 2,7 bytes

BufferedOutputStream: esta clase implementa un flujo de salida almacenado en búfer. Al configurar un flujo de salida de este tipo, una aplicación puede escribir bytes en el flujo de salida subyacente sin tener que hacer que el sistema llame a
BufferedIntputStream: una matriz de búferes internos para cada byte escrito. Cuando los bytes se leen o se omiten del flujo, el búfer interno se rellena según sea necesario desde el flujo de entrada contenido, muchos bytes a la
vez
.
en el objeto de flujo de bytes básico para operar

3. Flujo de personajes

Dado que no es particularmente conveniente operar chino con flujos de bytes, todo Java proporciona flujos de caracteres Flujo de
caracteres = flujo de bytes + tabla de codificación;
cuando se almacenan caracteres chinos, sin importar qué codificación se seleccione para el almacenamiento, el primer byte es un número negativo

3.1, tabla de codificación

La información almacenada en la computadora está representada por números binarios; los caracteres como los caracteres ingleses y chinos que vemos en la pantalla son el
conjunto de caracteres resultante después de la conversión de números binarios: es una colección de todos los caracteres admitidos por un sistema, incluidos los idiomas. de varios países, conjunto de caracteres Unicode para puntuación, gráficos, números, etc
.: diseñado para representar cualquier carácter en cualquier idioma, y ​​es un estándar de la industria. La codificación más utilizada es UTF-8

3.2 Problemas de codificación y decodificación en cadenas

Codificación:
byte[] getBytes(): codifica la cadena como una serie de bytes usando el juego de caracteres predeterminado de la plataforma, almacena el resultado en una nueva matriz de
bytes byte[] getBytes(String charsetName): usa el juego de caracteres especificado La cadena está codificada como un serie de bytes, almacenando el resultado en una nueva matriz de bytes
Decodificación: Cadena (byte [] bytes): construye una nueva cadena Cadena (
byte [] decodificando la matriz de caracteres especificada utilizando el conjunto de caracteres predeterminado de la plataforma

3.3 Problemas de codificación y decodificación en flujos de caracteres

Clase base abstracta de flujo de caracteres
Reader: clase abstracta para el flujo de entrada de caracteres
Writer: clase abstracta para el flujo de salida de caracteres
Dos clases relacionadas con problemas de codificación y decodificación en el flujo de caracteres:
InputStreamReader
OutputStreamWriter

3.4, 5 formas de escribir datos en flujo de caracteres

void write(int c) //escribe un carácter
void write(char[] cbuf) //escribe una matriz de caracteres
void write(char[] cbuf,int off, int len)//escribe parte de la matriz de caracteres
void write ( String str)//Escribe una cadena
void write(String str,int off,int len)//Escribe una parte de una cadena
void flush()//Actualiza la transmisión, puedes continuar escribiendo datos
void close()// Cerrar la transmisión libera recursos, pero vacía la transmisión antes de volver a cerrarla. Una vez cerrado, no se pueden escribir más datos.

3.5 Dos formas de leer datos por flujo de caracteres

int read() //Leer datos de un carácter a la vez
int read(char[] cbuf)//Leer datos de una matriz de caracteres a la vez
Caso: Copiar archivo java
FileReader(String fileName) //Clase conveniente para leer archivos de caracteres
FileWriter ( String fileName) // Clase de conveniencia para escribir archivos de caracteres

//把模块目录下的:Student.java复制到模块目录下的copy.java
InputStreamReader isr = new InputStreamReader(new FileInputStream("Student.java"),"GBK");

OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("copy.java"),"GBK");

int ch;
while((ch = isr.read()) != -1) {
    
    
	osw.write(ch);
}
isr.close();
osw.close();

Versión mejorada

//把模块目录下的:Student.java复制到模块目录下的copy.java
//根据数据源创建字符输入流对象
FileReader fr = new FileReader("Student.java");
//根据目的地创建字符输出流对象
FileWriter fw = new FileWriter("copy.java");

int ch;
while((ch = fr.read()) != -1) {
    
    
	fw.write(ch);
}

fr.close();
fw.close();

3.6, flujo de búfer de caracteres

BufferedWriter: escribe texto en un flujo de salida de caracteres, almacena en búfer los caracteres para proporcionar una escritura eficiente de caracteres individuales, matrices y cadenas. Se puede especificar el tamaño del búfer o se puede aceptar el tamaño predeterminado. El valor predeterminado es lo suficientemente grande para la mayoría de los usos
BufferedReader: lee texto de un flujo de entrada de caracteres, almacena en búfer los caracteres para proporcionar una lectura eficiente de caracteres, matrices y líneas, se puede especificar el tamaño del búfer o se puede usar el tamaño predeterminado. El valor predeterminado es lo suficientemente grande para la mayoría de los usos.

3.7 Funciones específicas del flujo del búfer de caracteres

BufferedWriter:
void newLine();//Escribe un separador de línea, la cadena del separador de línea está definida por la propiedad del sistema
BufferedReader:
public String readLine()//Lee una línea de texto. result una cadena que contiene el contenido de la línea, excluyendo cualquier carácter de terminación de línea, o nulo si se ha llegado al final de la transmisión

Supongo que te gusta

Origin blog.csdn.net/weixin_45573296/article/details/122979289
Recomendado
Clasificación