黑马程序员_day22_IO流 (二)

2014-11-24 11:47:31 · 作者: · 浏览: 5
储到了数组中,并返回了读到的个数 。

// 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();