Buffer高效字符流

阅读:285

目录介绍

  • 01.什么是高效字符流
  • 02.字符缓冲流BufferedReader
  • 03.字符缓冲流BufferedWriter
  • 04.字符缓冲流的特殊功能
  • 05.高效字符流复制文本文件
  • 06.集合数据存储到文本文件
  • 07.文本数据存储到集合中
  • 08.随机获取文本中姓名
  • 09.录入信息并且写入文件

02.字符缓冲流BufferedReader

  • 代码如下所示
    /**
     * 使用高效的字符输入流进行读取数据
     * @throws IOException
     */
    private static void read() throws IOException{
    	// 创建高效的字符输入流对象
    	// public BufferedReader(Reader in)
    //		BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("c.txt"))) ;
    	BufferedReader br = new BufferedReader(new FileReader("c.txt")) ;
    	// 读取数据
    //		int ch = 0 ;
    //		while((ch = br.read()) != -1){
    //			System.out.print((char)ch);
    //		}
    	char[] chs = new char[1024] ;
    	int len = 0 ;
    	while((len = br.read(chs)) != -1){
    		System.out.print(new String(chs , 0 , len));
    	}
    	// 释放资源
    	br.close() ;
    }
    

03.字符缓冲流BufferedWriter

  • 代码如下所示
    /**
     * 使用高效的字符输出流进行写数据
     * @throws IOException 
     */
    private static void write() throws IOException {
    	// 创建BufferedWriter对象
    	// public BufferedWriter(Writer out)
    //		OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("c.txt")) ;
    //		BufferedWriter bw = new BufferedWriter(osw) ;
    //		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("c.txt"))) ;
    	BufferedWriter bw = new BufferedWriter(new FileWriter("c.txt")) ;
    	// 写数据
    	bw.write("你好") ;
    	// 释放资源
    	bw.close() ;
    }
    

04.字符缓冲流的特殊功能

  • 如下所示
    BufferedWriter:	public void newLine():根据系统来决定换行符
    BufferedReader:	public String readLine():一次读取一行数据
    包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null
    

05.高效字符流复制文本文件

  • FileWriter和FileReader复制文本文件,一次读取一个字符数组复制文件
    public class CopyFileDemo {
    	public static void main(String[] args) throws IOException {
    		// 创建高效的字符输入流对象
    		BufferedReader br = new BufferedReader(new FileReader("OutputStreamWriterDemo.java")) ;
    		// 创建高效的字符输出流对象
    		BufferedWriter bw = new BufferedWriter(new FileWriter("copyFile3.java")) ;
    		// 一次读取一个字符数组复制文件
    		char[] chs = new char[1024] ;
    		int len = 0;
    		while((len = br.read(chs)) != -1){
    			bw.write(chs, 0, len) ;
    		} 
    		// 释放资源
    		bw.close() ;
    		br.close() ;
    	}
    }
    

  • 字符缓冲流的特殊功能复制文本文件,一次读取一行复制文件
    public class CopyFileDemo {
    	public static void main(String[] args) throws IOException {
    		/**
    		 * 需求: 使用高效的字符流中特有的功能复制文本文件
    		 */
    		// 创建高效的字符输入流对象
    		BufferedReader br = new BufferedReader(new FileReader("OutputStreamWriterDemo.java")) ;
    		
    		// 高效的字符输出流对象
    		BufferedWriter bw = new BufferedWriter(new FileWriter("copyFile4.java")) ;
    		
    		// 复制文件
    		// 一次读取一行复制文件
    		String line = null ;
    		while((line = br.readLine()) != null) {
    			bw.write(line) ;
    			bw.newLine() ;
    			bw.flush() ;
    		}
    		// 释放资源
    		bw.close() ;
    		br.close() ;
    	}
    }
    

06.集合数据存储到文本文件

  • 把集合中的数据存储到文本文件
    public static void main(String[] args) throws IOException {
    	/**
    	 * 把ArrayList集合中的数据存储到文本文件中
    	 * 分析:
    	 * 		1: 创建ArrayList集合对象
    	 * 		2: 添加数据
    	 * 		3: 创建高效的字符输出流对象
    	 * 		4: 遍历集合,获取每一个元素,然后通过流对象写出去
    	 * 		5: 释放资源
    	 */
    	// 创建ArrayList集合对象
    	ArrayList<String> al = new ArrayList<String>() ;
    	// 添加数据
    	al.add("西施") ;
    	al.add("貂蝉") ;
    	al.add("杨玉环") ;
    	al.add("王昭君") ;
    	// 创建高效的字符输出流对象
    	BufferedWriter bw = new BufferedWriter(new FileWriter("names.txt")) ;
    	// 遍历集合,获取每一个元素,然后通过流对象写出去
    	for(String name : al) {
    		bw.write(name) ;
    		bw.newLine() ;
    		bw.flush() ;
    	}
    	// 释放资源
    	bw.close() ;
    }
    

07.文本数据存储到集合中

  • 把文本文件中的数据存储到集合中
    public static void main(String[] args) throws IOException {
    	/**
    	 * 从文本文件中读取数据(每一行为一个字符串数据)到集合中,并遍历集合
    	 * 分析:
    	 * 		1: 创建高效的字符输入流对象
    	 * 		2: 创建集合对象
    	 * 		3: 读取文本文件中的数据,将数据存储到集合中
    	 * 		4: 释放资源
    	 * 		5: 遍历集合
    	 */
    	// 1: 创建高效的字符输入流对象
    	BufferedReader br = new BufferedReader(new FileReader("names.txt")) ;
    	// 2: 创建集合对象
    	ArrayList<String> al = new ArrayList<String>() ;
    	// 3: 读取文本文件中的数据,将数据存储到集合中
    	String line = null ;	// 作用: 用来记录读取到的行数据
    	while((line = br.readLine()) != null) {
    		al.add(line) ;
    	}
    	// 4: 释放资源
    	br.close() ;
    	// 5: 遍历集合
    	for(String name : al) {
    		System.out.println(name);
    	}
    }
    

08.随机获取文本中姓名

  • 随机获取文本文件中的姓名
    public static void main(String[] args) throws IOException {
    	// 1: 创建集合对象
    	ArrayList<String> students = new ArrayList<String> () ;
    	// 2: 创建BufferedReader对象
    	BufferedReader br = new BufferedReader(new FileReader("students.txt")) ;
    	// 3: 读取数据,把数据存储到集合中
    	String line = null ;
    	while((line = br.readLine()) != null) {
    		students.add(line) ;
    	}
    	// 4: 释放资源
    	br.close() ;
    	// 5: 生成一个随机数
    	Random random = new Random() ;
    	int index = random.nextInt(students.size());
    	// 6: 把生成的随机数作为集合元素的索引,来获取一个元素
    	String name = students.get(index) ;
    	// 7: 把获取到的元素打印到控制台
    	System.out.println(name);
    }
    

09.录入信息并且写入文件

  • 键盘录入学生信息按照总分排序并写入文本文件
    public static void main(String[] args) throws IOException {
    	
    	/**
    	 * 需求:键盘录入3个学生信息(姓名,语文成绩(chineseScore),数学成绩(mathScore),英语成绩(englishScore)),按照总分从高到低存入文本文件
    	 * 分析:
    	 * 		1: 创建一个学生类
    	 * 		2: 创建一个集合对象TreeSet集合
    	 * 		3: 键盘录入学生信息,把学生信息封装到学生对象中,然后把学生对象添加到集合中
    	 * 		4: 创建一个高效的字符输出流对象
    	 * 		5: 遍历集合,获取每一个元素,把其信息写入到文件中
    	 * 		6: 释放资源
    	 */
    	//  创建一个集合对象TreeSet集合
    	TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() {
    		@Override
    		public int compare(Student s1, Student s2) {
    			// 总分
    			int num = s2.getTotalScore() - s1.getTotalScore() ;
    			// 比较姓名
    			int num2 = (num == 0) ? s2.getName().compareTo(s1.getName()) : num ;
    			// 返回
    			return num2;
    		}
    	}) ;
    	
    	// 3: 键盘录入学生信息,把学生信息封装到学生对象中,然后把学生对象添加到集合中
    	for(int x = 1 ; x <= 3 ; x++) {
    		// 创建Scanner对象
    		Scanner sc = new Scanner(System.in) ;
    		System.out.println("请您输入第" + x + "个学生的姓名" );
    		String sutName = sc.nextLine() ;
    		System.out.println("请您输入第" + x + "个学生的语文成绩" );
    		int chineseScore = sc.nextInt() ;
    		System.out.println("请您输入第" + x + "个学生的数学成绩" );
    		int mathScore = sc.nextInt() ;
    		System.out.println("请您输入第" + x + "个学生的英语成绩" );
    		int englishScore = sc.nextInt() ;
    		
    		// 把学生的信封装到一个学生对象中
    		Student s = new Student() ;
    		s.setName(sutName) ;
    		s.setMathScore(mathScore) ;
    		s.setChineseScore(chineseScore) ;
    		s.setEnglishScore(englishScore) ;
    		// 把学生的信息添加到集合中
    		ts.add(s) ;
    	}
    	
    	// 创建一个高效的字符输出流对象
    	BufferedWriter bw = new BufferedWriter(new FileWriter("student.info")) ;
    	bw.write("==========================================学生的信息如下====================================================") ;
    	bw.newLine() ;
    	bw.flush() ;
    	bw.write("姓名\t\t总分\t\t数学成绩\t\t语文成绩\t\t英语成绩\t\t") ;
    	bw.newLine() ;
    	bw.flush() ;
    	for(Student t : ts) {
    		bw.write(t.getName() + "\t\t" + t.getTotalScore() + "\t\t" + t.getMathScore() + "\t\t" + t.getChineseScore() + "\t\t" + t.getEnglishScore()) ;
    		bw.newLine() ;
    		bw.flush() ;
    	}
    	// 释放资源
    	bw.close() ;
    }

赞赏支持


精彩留言

发表评论