前边已经用到 int read():用于读取单个字符。
需求:定义一个字符数组,用于存储读到字符.(重要)
import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class FileReaderDemo2 { public static void main(String[] args) throws IOException { FileReader fr=new FileReader("demo.txt"); char []buf=new char[3]; //int read(char[] buf):返回的int代表数据字符个数 int num=fr.read(buf); System.out.println("num="+num+"..."+new String(buf)); int num2=fr.read(buf); System.out.println("num2="+num2+"..."+new String(buf)); fr.close(); } }
需求:打印一个.java文件,并打印在控制台上
import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class FileReaderDemo3 { public static void main(String[] args) throws IOException { FileReader fr=new FileReader("Demo.java"); char [] buf=new char[1024]; int num=0; while((num=fr.read(buf))!=-1){ //数据在buf数组了,把数组转成字符串 System.out.println(new String(buf,0,num)); } fr.close(); } }
需求:把demo1.txt的东西写到demo2.txt
import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class FileReaderDemo4 { public static void main(String[] args) throws IOException { //把demo1的东西写到demo2 FileReader fr=new FileReader("demo1.txt"); FileWriter fw=new FileWriter("demo2.txt"); int c=0; while((c=fr.read())!=-1){ //FileWriter下的public void write(int c):c代表要写入字符的int //这个方法从demo1.txt读一个字符,就往demo2.txt写入一个,依次轮回,效率低 fw.write(c); } fr.close(); fw.close(); } }
改进效率问题以及进行规范的try--catch(重点):
import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class CopyDemo2 { public static void main(String[] args) throws IOException { FileReader fr=null; FileWriter fw=null; try{ fr=new FileReader("demo1.txt"); fw=new FileWriter("demo2.txt"); char []buf=new char[1024]; int num=0; while((num=fr.read(buf))!=-1){ fw.write(buf,0,num); } } catch(IOException e){ throw new RuntimeException("读写失败"); } finally{ if(fr!=null){ try{ fr.close(); }catch(IOException e){} finally{if(fw!=null) try{ fw.close(); }catch(IOException e){}} } } } }