复制文本文件
需求:把项目路径下的a.txt中的内容复制到项目路径下的b.txt中
文件复制:
数据源: a.txt--读数据--FileReader
目的地: b.txt--写数据--FileWriter
方法1.使用基本流FileWriter( )和FileReader( )
package com.mytest;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/*
* 需求:把项目路径下的a.txt中的内容复制到项目路径下的b.txt中
*
* 文件复制也是有规律可循的
*
* 数据源: a.txt--读数据--FileReader
*
* 目的地: b.txt--写数据--FileWriter
*
*/
public class CopyFileDemo {
public static void main(String[] args) throws IOException {
//创建输入流对象
FileReader fr = new FileReader("a.txt");
//创建输出流对象
FileWriter fw = new FileWriter("b.txt");
/*
//方法1:一次读写一个字符复制文本文件
int ch;
while((ch=fr.read())!=-1){
fw.write(ch);
}
*/
//方法2:一次读写一个字符数组复制文本文件
char[] chs = new char[1024];
int len;
while((len=fr.read(chs))!=-1) {
fw.write(chs, 0, len);
}
//释放资源
fw.close();
fr.close();
}
}
方法2:使用缓冲流 BufferedWriter和BufferedReader
如果使用缓冲流 BufferedWriter和BufferedReader,只需改一下对象的定义
1.创建输出缓冲流对象
BufferedWriter(Writer out) :创建一个使用默认大小输出缓冲区的缓冲字符输出流
例如: BufferedWriter bw = new BufferedWriter(new FileWriter("bw.txt"));
2.创建输入缓冲流对象
BufferedReader(Reader in):创建一个使用默认大小输入缓冲区的缓冲字符输入流
例如:BufferedReader br = new BufferedReader(new FileReader("br.txt"));
package com.mytest;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/*
* 需求:
* 把项目路径下的a.txt中的内容复制到项目路径下的b.txt中
*
* 数据源:
* a.txt -- 读数据 -- FileReader -- 高效的读数据 -- BufferedReader
* 目的地:
* b.txt -- 写数据 -- FileWriter -- 高效的写数据 -- BufferedWriter
*/
public class CopyFileDemo {
public static void main(String[] args) throws IOException {
//创建输入缓冲流对象
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
//创建输出缓冲流对象
BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));
//读写数据
/*
//方法1:一次读写一个字符
int ch;
while((ch=br.read())!=-1) {
bw.write(ch);
}
*/
//方法2:一次读写一个字符数组
char[] chs = new char[1024];
int len;
while((len=br.read(chs))!=-1) {
bw.write(chs,0,len);
}
//释放资源
bw.close();
br.close();
}
}
方法3:使用 缓冲流特殊功能复制文本文件(重点掌握)
BufferedReader
String readLine( ):一次读取一行数据,但是不读取换行符
package com.mytest;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/*
* 需求:
* 把项目路径下的a.txt中的内容复制到项目路径下的b.txt中
*
* 数据源:
* a.txt -- 读数据 -- FileReader -- 高效的读数据 -- BufferedReader
* 目的地:
* b.txt -- 写数据 -- FileWriter -- 高效的写数据 -- BufferedWriter
*/
public class CopyFileDemo {
public static void main(String[] args) throws IOException {
//创建输入缓冲流对象
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
//创建输出缓冲流对象
BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));
//读写数据
String line;
while((line=br.readLine())!=null) {
bw.write(line);
bw.newLine();
bw.flush();
}
//释放资源
bw.close();
br.close();
}
}
复制文本文件的5中方式汇总:
方法1:基本流一次读写一个字符
方法2:基本流一次读写一个字符数组
方法3:缓冲流一次读写一个字符
方法4:缓冲流一次读写一个字符数组
方法5:缓冲流一次读写一行字符串(重点掌握)
package com.mytest;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class CopyFileTest {
public static void main(String[] args) throws IOException {
String srcFileName = "a.txt"; // 源文件
String desFileName = "b.txt"; // 目标文件
method1(srcFileName,desFileName);
// method2(srcFileName,desFileName);
// method3(srcFileName,desFileName);
// method4(srcFileName,desFileName);
// method5(srcFileName,desFileName);
}
// 方法1:基本流一次读写一个字符
public static void method1(String srcFileName, String desFileName)
throws IOException {
// 创建输入流对象
FileReader fr = new FileReader(srcFileName);
// 创建输出流对象
FileWriter fw = new FileWriter(desFileName);
// 一次读写一个字符
int ch;
while ((ch = fr.read()) != -1) {
fw.write(ch);
}
// 释放资源
fw.close();
fr.close();
}
// 方法2:基本流一次读写一个字符数组
public static void method2(String srcFileName, String desFileName)
throws IOException {
// 创建输入流对象
FileReader fr = new FileReader(srcFileName);
// 创建输出流对象
FileWriter fw = new FileWriter(desFileName);
// 一次读写一个字符数组
char[] chs = new char[1024];
int len;
while ((len = fr.read(chs)) != -1) {
fw.write(chs, 0, len);
}
// 释放资源
fw.close();
fr.close();
}
// 方法3:缓冲流一次读写一个字符
public static void method3(String srcFileName, String desFileName)
throws IOException {
// 创建输入缓冲流对象
BufferedReader br = new BufferedReader(new FileReader(srcFileName));
// 创建输出缓冲流对象
BufferedWriter bw = new BufferedWriter(new FileWriter(desFileName));
// 一次读写一个字符
int ch;
while ((ch = br.read()) != -1) {
bw.write(ch);
}
// 释放资源
bw.close();
br.close();
}
// 方法4:缓冲流一次读写一个字符数组
public static void method4(String srcFileName, String desFileName)
throws IOException {
// 创建输入缓冲流对象
BufferedReader br = new BufferedReader(new FileReader(srcFileName));
// 创建输出缓冲流对象
BufferedWriter bw = new BufferedWriter(new FileWriter(desFileName));
// 一次读写一个字符数组
char[] chs = new char[1024];
int len;
while ((len = br.read(chs)) != -1) {
bw.write(chs, 0, len);
}
// 释放资源
bw.close();
br.close();
}
// 方法5:缓冲流一次读写一行字符串(重点掌握)
public static void method5(String srcFileName, String desFileName)
throws IOException {
// 创建输入缓冲流对象
BufferedReader br = new BufferedReader(new FileReader(srcFileName));
// 创建输出缓冲流对象
BufferedWriter bw = new BufferedWriter(new FileWriter(desFileName));
// 一次读写一行字符串
String line;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine(); // 换行
bw.flush();
}
// 释放资源
bw.close();
br.close();
}
}