文件(三)IO流(BufferedReader,BufferedWriter ,properties)

BufferedReader:默认提供了一个缓冲区,相对于fileReader效率更高。底层还是使用的FileReader来读取.
BufferedReader提供一个特有的方法 readLine 可以一次读取一行字符串
注意:readLine并没有读取换行符 \r\n

设计模式:解决同一类问题的常用手段。
装饰设计模式:用同类的对象来构建本类对象,从而对所构建的本类对象的功能进行增强或者修复。
BufferedReader和BufferedWriter就是所谓的装饰设计模式
BufferedWriter:写入数据。提供了一个特有的方法(newLine),可以换行。

BufferedReader的使用

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class BufferedReaderDemo {
	public static void main(String[] args) throws IOException {
		// 创建对象
		// 传入FileReader对象
		// 底层使用FileReader
		BufferedReader br = new BufferedReader(new FileReader("F:\\667.txt"));
		
		// 可以一次读取一行
		String str;
		while((str = br.readLine()) != null){
			System.out.println(str);
		}
		// 关闭流
		br.close();
	}
}

BufferedWriter的使用:

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class BufferedWriterDemo {
	public static void main(String[] args) throws IOException {
		// 创建对象
		BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\a.txt"));
		bw.write("爱情这杯酒,谁喝都会醉");
		// 换行
	//	bw.newLine();
		bw.write("什么爱情,什么永久!!");
		
//		bw.flush();
		bw.close();
	}
}

练习

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class PracticeDemo {
	static int javaCount = 0;
	public static void main(String[] args) throws IOException {
		// 统计workspace中的代码行数
		// 代码都写在.java文件中
		// 先找到.java文件
		// 然后通过BufferedReader读取一行
		// 然后进行行数的计数
		
		// File类来操作文件和目录
		File file = new File("F:\\workspace");
		count(file);
		System.out.println("总共写了" + javaCount + "行代码");
	}
	
	// 定义一个方法,来寻找.java文件
	public static void count(File file) throws IOException{
		if (file.isDirectory()){
			// 如果是目录,列出目录所有内容
			File[] files = file.listFiles();
			for (File f : files) {
				count(f);
			}
		}else if(file.getName().endsWith(".java")){
			// 找到.java文件  CopyTxt.java
			BufferedReader br = new BufferedReader(new FileReader(file.getAbsolutePath()));
			String str;
			while ((str = br.readLine()) != null){
				javaCount++;
			}
			
			br.close();
		}

properties
映射,继承HashTable 特点:键值对不能为null
键值对必须都是String类型
properties是持久化存储。会牵扯到IO流的相关内容。

注意:持久化存储时,文件类型必须是.properties

如果根据key获取到的value是null,那么这个key一定不存在。

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;

public class PropertiesDemo {
	public static void main(String[] args) throws IOException {
		// Properties 键值对不能为null 而且类型只能是String
		Properties prop = new Properties();
//		// 存放内容到内存
		prop.setProperty("name", "周润发");
		prop.setProperty("age", "六十岁");
		prop.setProperty("id", "4359875");
//		
		prop.store(new FileOutputStream("prop.properties"), "this is a comment");
		
		
		// 读取
		prop.load(new FileInputStream("prop.properties"));
//		System.out.println(prop.getProperty("score"));
		// 如果获取到对应的value,那么正常显式
		// 如果获取不到,返回第二个参数(默认的value)
		System.out.println(prop.getProperty("id", "90"));
		
		// 遍历映射
		prop.list(System.out);
	}
}

猜你喜欢

转载自blog.csdn.net/xianrenqiu1234/article/details/86634351