// int len1 = fr.read(buf);
// System.out.println(len1+":"+new String(buf,0,len1));
// int len2 = fr.read(buf);
// System.out.println(len2+":"+new String(buf,0,len2));
// int len3 = fr.read(buf);
// System.out.println(len3+":"+new String(buf,0,len3));
// int len4 = fr.read(buf);
// System.out.println(len4+":"+new String(buf));
用循环
int len = 0;
while((len=fr.read(buf))!=-1){
System.out.println(new String(buf,0,len));
}
fr.close();
}
六、复制文本文件
练习:将c盘的一个文本文件复制到d盘。
思路:
1,c盘的文件是一个数据的源。
复制到的d盘,说明d盘是数据的存储的目的。该目的中应该有一个文件。
2,先读取c盘的文件。将读取到的数据写入到目的地中。
3,既然是操作文本文件,只要使用字符流即可。
方式一:读一个 写一个 效率低
public static void main(String[] args) throws IOException {
//1,创建字符读取流对象和源相关联。
FileReader fr = new FileReader("tempfile\\IO流.txt");
//2,创建字符输出流对象,明确要存储数据的目的。
FileWriter fw = new FileWriter("tempfile\\copy_demo.txt");
//3,进行读写操作。读取一个,就写入一个。
int ch = 0;
while((ch=fr.read())!=-1){
fw.write(ch);
}
//4,关闭资源。
fw.close();
fr.close();
}
方式二 :先将硬盘上的源文件数据通过输入流存储到内存中创建的缓存区,再从缓存区通过输出流写入目的文件中。效率高
使用缓冲区数组。
使用的就是可以操作数组的读写方法。
//1,定义字符输入流和字符输出流的引用。
FileReader fr = null;
FileWriter fw = null;
try {
//2,对流对象进行初始化。
fr = new FileReader("tempfile\\demo.txt");
fw = new FileWriter("tempfile\\copy_demo2.txt");
//3,定义一个数组缓冲区。用于缓冲读取到的数据。
char[] buf = new char[1024];
//4,读写操作。
int len = 0;
while((len = fr.read(buf))!=-1){
fw.write(buf,0,len);读入len个,就写len个字符
}
} catch (Exception e) {
System.out.println(e.toString());
}finally{
if(fw!=null)
try {
fw.close();
} catch (IOException e) {
throw new RuntimeException("写入关闭失败");
}
if(fr!=null)
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
七、字符串的缓冲区。BufferedWriter
缓冲区给给流的操作动作(读写)提高效率.所以缓冲区的对象建立必须要有流对象。
public static void main(String[] args) throws IOException {
//创建一个流对象。
FileWriter fw = new FileWriter("tempfile\\buf.txt");
//为了提高效率。创建缓冲区对象,并和要被提高效率的流相关联。
BufferedWriter bufw = new BufferedWriter(fw);
//接下来就使用缓冲区的方法。因为缓冲区的操作的都是数组中的元素的高效方法。
bufw.write("abcde");
bufw.newLine();换行=System.getProperty("line.separator");
bufw.write("xixixi");
//要对缓冲区进行刷新。记住:一般只要使用了缓冲区,就一定要刷新。
bufw.flush();
//关闭缓冲区。
bufw.close();//问:还用关闭fw.close() 不用,因为关闭缓冲区,其实就是在关闭缓冲区关联的流。
}
八、字符串的缓冲区BufferedReader
演示BufferedReader
1,先有字符读取流。
2,该类有一个特有方法。readLine().一次读一行。
//创建读取流对象和文件相关联。
FileReader fr = new FileReader("tempfile\\buf.txt");
//创建读取缓冲区对象和流对象关联,对其进行高效操作。
BufferedReader bufr = new BufferedReader(fr);
// String line1 = bufr.readLine();
// System.out.println("line1:"+line1);
// String line2 = bufr.readLine();
// System.out.println("line2:"+line2);
// String line3 = bufr.readLine();
// System.out.println("line3:"+line3);
// String line4 = bufr.readLine();
// System.out.println("line4:"+line4);
// String line5 = bufr.readLine();
// System.out.println("line5:"+line5);
String line = null;
while((line=bufr.readLine())!=null){
System.out.print(line);
}
bufr.close();
}
九、 使用缓冲区对文本文件进行复制。 该缓冲区也只能对文本文件
BufferedReader bufr = null;
BufferedWriter bufw = null;
try {
bufr = new BufferedReader(new FileReader("tempfile\\IO流.txt"));
bufw = new BufferedWriter(new FileWriter("tempfile\\copy_buf.txt"));
//读写行的操作。
String line = null;
while((line=bufr.readLine())!=null){
bufw.write(line);
bufw.newLine();
bufw.flush();