天天看点

Java IO——字符流

  • 字符流
  • 1)编码问题
  • 2)认识文本和文本文件
  •   java的文本(char)是16位无符号整数,是字符的unicode编码(双字节编码)
  •   文件是byte byte byte.....的序列
  •   文本文件是文本(char)序列按照某种编码方案(utf-8,utf-16be,gbk)序列化位byte的存储结果
  • 3)字符流(Reader Writer)------>操作是文本、文本文件
  •   字符的处理,一次处理一个字符
  •   字符的底层仍然是基本的字节序列
  •   字符流的基本实现
  •   InputStreamReader  完成byte流解析为char流,按照编码解析
  •   OutputStreamWriter 提供char流到byte流,按照编码处理
  •   FileReader/Filewriter文件的读取和写入
  •   BufferedReader/BufferedWriter
  •   PrintlnWriter
  •   BufferedWriter和PrintlnWriter的区别
  •   BufferedWriter在写入时,不会自动换行,而PrintlnWriter会自动换行
  • import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    
    public class IOUtil {
    	
    	public static void main(String[] args) throws IOException {
    		FileInputStream in = new FileInputStream("e://javaio//日记.txt");
    		InputStreamReader isr = new InputStreamReader(in,"gbk");//默认项目的编码
    		FileOutputStream out = new FileOutputStream("e://javaio//日记3.txt");
    		OutputStreamWriter osw = new OutputStreamWriter(out,"gbk");
    		/*int c;
    		while((c = isr.read()) != -1){
    			System.out.print((char)c);
    		}
    		*/
    		/**
    		 * 批量读取,放入buffer这个字符数组中,从第0个开始放置,最多放置buffer.length个
    		 * 返回的是读到的字符个数
    		 */
    		char[]  buffer = new char[8 * 1024];
    		int b;
    		while((b = isr.read(buffer, 0, buffer.length)) != -1){
    			String s = new String(buffer,0,b);
    			System.out.print(s);
    			osw.write(buffer,0,b);
    			osw.flush();
    		}
    		isr.close();
    		osw.close();
    		in.close();
    		out.close();
    	}
    
    }
               
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    
    public class BrAndBf {
    
    	public static void main(String[] args) throws IOException {
    		// 对文件进行读写操作
    		BufferedReader br = new BufferedReader(
    				new InputStreamReader(
    						new FileInputStream("e:\\javaio\\日记.txt")));
    		BufferedWriter bw = new BufferedWriter(
    				new OutputStreamWriter(
    						new FileOutputStream("e:\\javaio\\日记5.txt")));
    		PrintWriter pw = new PrintWriter("e:\\javaio\\日记6.txt");
    		String line;
    		while((line = br.readLine()) != null){
    			System.out.println(line);//一次读一行,并不能识别换行
    			bw.write(line);
    			//单独写出换行操作
    			bw.newLine();
    			bw.flush();
    			pw.println(line);
    			pw.flush();
    			
    		}
    		br.close();
    		bw.close();
    		pw.close();
    	}
    }
               
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class FrAndFwDemo {
    
    	public static void main(String[] args) throws IOException {
    		FileReader fr = new FileReader("e:\\javaio\\日记.txt");
    		FileWriter fw = new FileWriter("e:\\javaio\\日记4.txt");
    		char[] buffer = new char[2 * 1024];
    		int c;
    		while((c = fr.read(buffer,0,buffer.length))!= -1){
    			fw.write(buffer,0,c);
    			fw.flush();
    		}
    		fr.close();
    		fw.close();
    	}
    
    }