中关村黑马程序员 — 复制文本文件的两种方法
第一种方法通过字符流的两个缓冲区BufferedReader和BufferedWriter来复制文件
步骤:
1.创建一个读取流对象new FileReader(fileName)和文件相关联。
2.创建一个读取流 的缓冲对象new BufferedReader( FileReader);
将需要被提高效率的流对象new FileReader(fileName)作为参数传递给缓冲区对象new BufferedReader( FileReader)的构造函数即可。
3.创建一个字符写入流对象。 new FileWriter(fileName)和文件相关联
4.创建一个 写入流 的缓冲对像new BufferedWriter(FileWriter );
将需要被提高效率的流对象new FileWriter(fileName)作为参数传递给缓冲区对象new BufferedWriter( FileWriter )的构造函数即可。
5.调用读流缓冲区对象new BufferedReader( FileReader)的功能方法readLine()读取文件数据字符, 并用while循环语句来读取文件里的所有数据
6.分别调用缓冲区对象new BufferedReader( FileReader)的功能方法bufw.write(line),bufw.newline(), bufw.flush()来对文件的数据进行操作
import java.io.*;
class Bufferwr
{
public static void main(String[] args)
{
//建立字符输入输出流的引用,便于整个类的使用
BufferedReader bufr =null;
BufferedWriter bufw =null;
try
{
//建立字符输入流,关联文件A.java 进行异常处理
FileReader fr = new FileReader("A.java");
bufr =new BufferedReader(fr);
//建立字符输出流,关联文件 B.txt
FileWriter fw = new FileWriter("B.txt");
bufw = new BufferedWriter(fw);
// String line = bufr.readLine();
String line =null;
//while循环,把读取的数据存写入到新建文件B.txt
while ((line =bufr.readLine())!=null)
{
bufw.write(line);
bufw.newLine();
bufw.flush();
}
}
catch (IOException e)
{
System.out.println(e.toString());
//或throw new RuntimeException("缓冲区读写失败异常");
}
finally
{ // 必须要执行的代码,并进行异常处理
bufr.close()
try
{ if(bufr!=null)
bufr.close();
}
catch (IOException e)
{
System.out.println(e.toString());
//或throw new RuntimeException("缓冲区读流关闭失败异常");
}
try
{ if(bufw!=null)
bufw.close();
}
catch (IOException e)
System.out.println(e.toString());
//或throw new RuntimeException("缓冲区写流关闭失败异常");
}
}
FileReader fr = new FileReader("A.java");
BufferedReader bufr =new BufferedReader(fr);
FileWriter fw = new FileWriter("B.txt");
BufferedWriter burw = new BufferedWriter(fw);
System.out.println("Hello World!");
}
}
第二种方法通过字符流FileWriter和 FileReader复制来文件
步骤;1.创建一个new FileWriter(fileName)对象。该对象一被初始化就必须要明确被操作的文件。
在相应的目录下会自动建立一个文件fileName2.创建一个文件读取流对象new FileReader(fileName);,和指定名称的文件相关联。此文件fileName 已经预先存在内有数据,如果不存在,FileNotFoundException会发生异常
3.自定义一个字符数组 char[] buf =new char[1204]。用于存储读到文件fileName的数据字符。
//该read(char[])返回的是读到字符个数。
4.调用读取流对象new FileReader(fileName)的功能方法read(char[]) 把读取到的字符都存储到数组里char[],往数组里读取了len次
5.调用new FileWriter(fileName)对象的功能方法write(char[],off,len) ,把数组中的所欲数据写入流对象 创建的文件里
6. 写入流对象FileWriter fw =new FileWriter("B.txt");读取流对象FileReader fr =new FileReader("A.java");
中转站数组 char[] buf = new char[1024];public static void main(String[] args)
{
//建立字符输入输出流 引用
FileWriter fw=null;
FileReader fr =null;
try
{
//建立字符输入输出流对象 fw fr 并异常处理
fw =new FileWriter(“B.txt”);
fr =new FileReader(“A.java”);
char[] buf = new char[1024];
//int len =fr.read(buf);
int len =0;
//while循环 把出数组读取的数据写入到新建文件B.txt里
while((len = fr.read(buf))=-1)
{
fw.write(char[],0,len);
}
}
catch (IOException e)
{
System.out.println(e.toString());
//或throw new IOException ("写读流失败异常");
}
finally
{
if(fw!=null)
//fw.close()是必须执行代码,放在finally{},并进行异常处理
try
{
fw.close();
}
catch (IOException e)
{ System.out.println(e.toString());
//或throw new IOException ("写流关闭失败异常");
}
if(fr!=null)
try
{
fr.close();
}
catch (IOException e)
{ System.out.println(e.toString());
//或throw new IOException ("读流关闭失败异常");
}
}
}