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);
}
}