char 2个字节 ----->在 jvm中 默认采用的是 unicode编码 占2个字节 在操作系统中: 在所有的编码表中 英文字符都占1个字节 ,汉字 在 GBK中 占2个字节 ,在UTF-8中占 3个字节
案例:
import java.io.File; import java.io.FileInputStream; public class Demo9 { public static void main(String[] args) throws Exception{ //使用字节流 读取 a.txt中的内容 File file = new File("file/a.txt"); FileInputStream fileInputStream = new FileInputStream(file); //读取 一个字节 // int read1 = fileInputStream.read(); // System.out.println((char)read1); // int read2 = fileInputStream.read(); // System.out.println((char)read2); // int read3 = fileInputStream.read(); // System.out.println((char)read3); //读取一个字节数组 byte[] data = new byte[4]; int len; while ((len = fileInputStream.read(data))!=-1){ System.out.println(new String(data,0,len)); } fileInputStream.close(); } }
Writer Reader
FileWriter:文件字符输出流 FileReader:文件字符输入流
FileWriter(File file) 给一个File对象构造一个FileWriter对象。 FileWriter(File file, boolean append) 给一个File对象构造一个FileWriter对象。。 FileWriter(String fileName) 构造一个给定文件名的FileWriter对象。 FileWriter(String fileName, boolean append) 构造一个FileWriter对象,给出一个带有布尔值的文件名,表示是否附加写入的数据。
void close() 关闭流,先刷新。 void flush() 刷新流。 void write(char[] cbuf) 写入一个字符数组。 void write(char[] cbuf, int off, int len) 写入字符数组的一部分。 void write(int c) 写一个字符 void write(String str) 写一个字符串 void write(String str, int off, int len) 写一个字符串的一部分。
//案例: import java.io.File; import java.io.FileWriter; public class Demo10 { public static void main(String[] args) throws Exception{ //创建字符流对象 // File file = new File("file/a.txt"); // FileWriter fileWriter = new FileWriter(file); FileWriter fileWriter = new FileWriter("file/a.txt"); } } //案例2: import java.io.File; import java.io.FileWriter; public class Demo10 { public static void main(String[] args) throws Exception{ //创建字符流对象 // File file = new File("file/a.txt"); // FileWriter fileWriter = new FileWriter(file); FileWriter fileWriter = new FileWriter("file/a.txt",true); // char c = '刘'; // fileWriter.write(c);//说明 内部有缓冲区 String s = "落霞与孤鹜齐飞,秋水共长天一色"; // char[] chars = s.toCharArray(); // fileWriter.write(chars); fileWriter.write(s); fileWriter.flush(); fileWriter.close(); } }
案例:
import java.io.File; import java.io.FileReader; import java.io.FileWriter; public class Demo12 { public static void main(String[] args) throws Exception{ //创建两个File对象 File srcFile = new File("file/a.txt"); File dirFile = new File("dir/a.txt"); //创建字符流 FileReader fileReader = new FileReader(srcFile); FileWriter fileWriter = new FileWriter(dirFile); //一边读一边写 // 第一种 每次复制一个字符 所用的时间为:4448300纳秒 long start = System.nanoTime(); // int data; // while ((data = fileReader.read())!=-1){ // fileWriter.write(data); // } //第二种 每次复制一个字符数组 608500纳秒 char[] data = new char[1024*8]; int len; // while ((len = fileReader.read(data))!=-1){ // fileWriter.write(data,0,len); // } //第三种 while ((len = fileReader.read(data))!=-1){ fileWriter.write(new String(data,0,len)); } long end = System.nanoTime(); System.out.println("所用的时间为:"+(end - start)+"纳秒"); fileReader.close(); fileWriter.close(); } }
FileReader(File file) 创建一个新的 FileReader ,给出 File读取。 FileReader(String fileName) 创建一个新的 FileReader ,给定要读取的文件的名称。
int read() 读一个字符 int read(char[] cbuf) 将字符读入数组。 abstract int read(char[] cbuf, int off, int len) 将字符读入数组的一部分。
//案例: import java.io.File; import java.io.FileReader; public class Demo11 { public static void main(String[] args) throws Exception{ File file = new File("file/a.txt"); FileReader fileReader = new FileReader(file); //每次可以读取一个字符 // int read = fileReader.read();//根据当前的编码环境 进行动态的读取 // System.out.println((char) read); // int data ; // while ((data = fileReader.read())!=-1){ // System.out.println((char)data); // } // 每次读取一个字符数组 char[] piao = new char[3]; int len; // while (true){ // len = fileReader.read(piao); // if (len == -1){ // break; // } // System.out.print(new String(piao,0,len)); // } while ((len = fileReader.read(piao))!=-1){ System.out.print(new String(piao,0,len)); } fileReader.close(); } }