Notas de estudio de Java: caso de flujo de IO

1. Colección a archivo

1.1 Copiar la colección a un archivo

    ArrayList<String> array = new ArrayList<String>();
	array.add("hello");
	array.add("world");
	array.add("java");
	
	BufferedWriter bw = new BufferedWriter(new 	FileWriter("array.txt"));
	
	for(String s : array) {
    
    
		bw.write(s);
		bw.newLine();
		bw.flush();
	}	
	bw.close();

1.2, copia el archivo a la colección

BufferedReader br = new BufferedReader(new FileReader("array.txt"));
ArrayList<String> array = new ArrayList<String>();

String line;
while((line = br.readLine()) != null) {
    
    
	array.add(line);
}

br.close();

for(String s : array) {
    
    
	System.out.println(s);
}

1.3 Caso: Persona que llama

Requisito: tengo un archivo que almacena los nombres de los compañeros de clase, cada nombre ocupa una línea y requiere una llamada aleatoria para implementarse a través del programa

	BufferedReader br = new BufferedReader(new FileReader("array.txt"));
	ArrayList<String> array = new ArrayList<String>();
	
	String line;
	while((line = br.readLine()) != null) {
    
    
		array.add(line);
	}
	
	br.close();
	
	Random r = new Random();
	int index = r.nextInt(array.size());
	
	String name = array.get(index);
	System.out.println("幸运者是"+name);

1.4 Copiar colección a archivo (versión mejorada)

	ArrayList<Student> array = new ArrayList<Student>();
	
	Student s1 = new Student("it001","张三",19,"山西");
	Student s2 = new Student("it002","李四",20,"临汾");
	Student s3 = new Student("it003","王五",21,"曲沃");
	
	array.add(s1);
	array.add(s2);
	array.add(s3);
	
	BufferedWriter bw = new BufferedWriter(new FileWriter("array.txt"));
	for(Student s : array) {
    
    
		StringBuilder sb = new StringBuilder();
		sb.append(s.getSid()).append(",").append(s.getName()).append(",").append(s.getAge()).append(",").append(s.getAddress());
		bw.write(sb.toString());
		bw.newLine();
		bw.flush();
	}
	
	bw.close();

1.5 Copiar archivos a colecciones (versión mejorada)

//创建字符缓冲输入流对象
	BufferedReader br = new BufferedReader(new FileReader("array.txt"));
	
	ArrayList<Student> array = new ArrayList<Student>();
	
	String line;
	while((line = br.readLine()) != null) {
    
    
		
		String[] strArray = line.split(",");
		Student s = new Student();
		s.setSid(strArray[0]);
		s.setName(strArray[1]);
		s.setAge(Integer.parseInt(strArray[2]));
		s.setAddress(strArray[3]);
		array.add(s);
	}
	br.close();
	for(Student s : array) {
    
    
		System.out.println(s.getSid()+","+s.getName()+","+s.getAge()+","+s.getAddress());
	}

2. Copia la carpeta

2.1 Copiar una carpeta de un solo nivel

	//创建数据源目录File对象,路径是E:\\java
	File srcFolder = new File("E:\\java");
	//获取数据源目录File对象的名称
	String srcFolderName = srcFolder.getName();
	//创建目的地目录File对象,路径名是模块名
	File destFolder = new File("myCharStream",srcFolderName);
	
	//判断目的地目录对应的File是否存在,如果不存在,就创建
	if(!destFolder.exists()) {
    
    
		destFolder.mkdir();
	}
	
	//获取数据源目录下所有文件的File数组
	File[] listFiles = srcFolder.listFiles();
	
	for(File srcFile : listFiles) {
    
    
		//获取数据源文件file对象的名称
		String name = srcFile.getName();
		//创建目的地文件File对象,路径名是目的地目录组成
		File destFile = new File(destFolder,name);
		
		//复制文件,方法
		copyFile(srcFile,destFile);
	}

//定义复制文件的方法
    private static void copyFile(File srcFile,File destFile) throws IOException{
    
    
	
	BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
	BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));
	
	byte[] bys = new byte[1024];
	int len;
	while((len = bis.read(bys)) != -1) {
    
    
		bos.write(bys, 0, len);
	}
	bis.close();
	bos.close();
}

2.2 Copiar carpetas de varios niveles

Requisitos: Copie la carpeta E:java al directorio D:

//创建数据源目录File对象,路径是E:\\java
	File srcFile = new File("E:\\java");
	//创建目的地目录File对象,路径名是模块名
	File destFile = new File("D:\\");
	
	//复制文件夹,方法
	copyFolder(srcFile,destFile);
//复制文件夹
	private static void copyFolder(File srcFile,File destFile) throws IOException {
    
    
		//判断数据源File是否是目录
		if(srcFile.isDirectory()) {
    
    
			//在目的地下创建和数据源File名称一样的目录
			String srcFileName = srcFile.getName();
			File newFolder = new File(destFile,srcFileName);
			if(!newFolder.exists()) {
    
    
				newFolder.mkdir();
			}
			
			//获取File下所有文件或目录的File数组
			File[] fileArray = srcFile.listFiles();
			for(File file : fileArray) {
    
    
				copyFolder(file,newFolder);
			}
		}
		else {
    
    
			//说明是文件,直接复制,用字节流
			File newFile = new File(destFile,srcFile.getName());
			copyFile(srcFile,newFile);
		}
		
	}
//复制文件
private static void copyFile(File srcFile,File destFile) throws IOException{
    
    
	
	BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
	BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));
	
	byte[] bys = new byte[1024];
	int len;
	while((len = bis.read(bys)) != -1) {
    
    
		bos.write(bys, 0, len);
	}
	bis.close();
	bos.close();
}

Supongo que te gusta

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