黑马程序员技术交流社区
标题:
IO流中复制文件的9种方式总结
[打印本页]
作者:
周博文
时间:
2015-8-14 00:16
标题:
IO流中复制文件的9种方式总结
其实如果细说的话IO流中复制文件的方式可能要多于9种,但我在这里列出的9种复制方式应该是大家需要理解并掌握的,熟练掌握这9中复制文件的方法之后,你会觉得IO流其实不难。看过刘意(风清扬)老师视频的人可能都知道在写IO流程序的时候应该明确下面这3点:
<1>数据源(source):明确数据源是什么,一个文件?一个集合?网络?。。。。明确数据源是字符流还是字节流?如果不能明确那么就用字节流。
<2>目的地(target):明确数据的输出目标是什么?明确接收的数据是字符流还是字节流?如果不能明确就用字节流
<3>使用什么类型的流:根据传输数据的需求,明确到底使用哪一种流。
下面分两大类分别说明:
第一类:字节流
1.文件字节流:一次复制一个字节
public class IODemo {
public static void main(String[] args) throws IOException {
//定义两个文件对象分别对应源文件,目标文件
File source = new File("sourceFile.mp3");
File target = new File("targetFile.mp3");
//创建输入输出流
FileInputStream fis = new FileInputStream(source);
FileOutputStream fos = new FileOutputStream(target);
//定义一个变量用于传递数据
int b = 0;
while((b = fis.read()) != -1) {
fos.write(b);
}
//关闭资源
fis.close();
fos.close();
}
}
复制代码
2.文件字节流:一次复制一个字节数组
public class IODemo {
public static void main(String[] args) throws IOException {
//定义两个文件对象分别对应源文件,目标文件
File source = new File("sourceFile.mp3");
File target = new File("targetFile.mp3");
//创建输入输出流
FileInputStream fis = new FileInputStream(source);
FileOutputStream fos = new FileOutputStream(target);
//定义一个变量用于传递数据
byte[] bytes = new byte[1024];
//定义一个变量记录每次读入字节数组数据的长度
int len = 0;
while((len = fis.read(bytes)) != -1) {
fos.write(bytes, 0 ,len);
}
//关闭资源
fis.close();
fos.close();
}
}
复制代码
3.缓冲文件字节流:一次复制一个字节
public class IODemo2 {
public static void main(String[] args) throws IOException {
// 定义两个文件对象分别对应源文件,目标文件
File source = new File("sourceFile.mp3");
File target = new File("targetFile.mp3");
// 创建缓冲输入输出流
BufferedInputStream bis = new BufferedInputStream(
new FileInputStream(source));
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream(target));
//定义一个变量用于传递数据
int b = 0;
while((b = bis.read()) != -1) {
bos.write(b);
}
//关闭资源
bis.close();
bos.close();
}
}
复制代码
4.缓冲文件字节流:一次复制一个字节数组
public class IODemo2 {
public static void main(String[] args) throws IOException {
// 定义两个文件对象分别对应源文件,目标文件
File source = new File("sourceFile.mp3");
File target = new File("targetFile.mp3");
// 创建缓冲输入输出流
BufferedInputStream bis = new BufferedInputStream(
new FileInputStream(source));
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream(target));
//定义一个变量用于传递数据
byte[] bytes = new byte[1024];
//定义一个变量记录每次读入字节数组数据的长度
int len = 0;
while((len = bis.read(bytes)) != -1) {
bos.write(bytes, 0, len);
}
//关闭资源
bis.close();
bos.close();
}
}
复制代码
第二类:字符流
1.文件字符流:一次读取一个字符
public class IODemo {
public static void main(String[] args) throws IOException {
//定义两个文件对象分别对应源文件,目标文件
File source = new File("sourceFile.txt");
File target = new File("targetFile.txt");
//创建输入输出流
FileReader fr = new FileReader(source);
FileWriter fw = new FileWriter(target);
//定义一个变量用于传递数据
int c;
while((c = fr.read()) != -1) {
fw.write(c);
}
//关闭资源
fr.close();
fw.close();
}
}
复制代码
2.文件字符流:一次读取一个字符数组
public class IODemo {
public static void main(String[] args) throws IOException {
//定义两个文件对象分别对应源文件,目标文件
File source = new File("sourceFile.txt");
File target = new File("targetFile.txt");
//创建输入输出流
FileReader fr = new FileReader(source);
FileWriter fw = new FileWriter(target);
//定义一个变量用于传递数据
char[] chars = new char[1024];
int len = 0;
while((len = fr.read(chars)) != -1) {
fw.write(chars, 0, len);
}
//关闭资源
fr.close();
fw.close();
}
}
复制代码
3.缓冲文件字符流:一次读取一个字符
public class IODemo2 {
public static void main(String[] args) throws IOException {
// 定义两个文件对象分别对应源文件,目标文件
File source = new File("sourceFile.mp3");
File target = new File("targetFile.mp3");
// 创建缓冲输入输出流
BufferedReader br = new BufferedReader(
new FileReader(source));
BufferedWriter bw = new BufferedWriter(
new FileWriter(target));
//定义一个变量用于传递数据
int c = 0;
while((c = br.read()) != -1) {
bw.write(c);
}
//关闭资源
br.close();
bw.close();
}
}
复制代码
4.缓冲文件字符流:一次读取一个字符数组
public class IODemo2 {
public static void main(String[] args) throws IOException {
// 定义两个文件对象分别对应源文件,目标文件
File source = new File("sourceFile.mp3");
File target = new File("targetFile.mp3");
// 创建缓冲输入输出流
BufferedReader br = new BufferedReader(
new FileReader(source));
BufferedWriter bw = new BufferedWriter(
new FileWriter(target));
//定义一个变量用于传递数据
char[] chars = new char[1024];
int len = 0;
while((len = br.read(chars)) != -1) {
bw.write(chars, 0, len);
}
//关闭资源
br.close();
bw.close();
}
}
复制代码
5.缓冲文件字符流:一次读取一行字符
public class IODemo2 {
public static void main(String[] args) throws IOException {
// 定义两个文件对象分别对应源文件,目标文件
File source = new File("sourceFile.mp3");
File target = new File("targetFile.mp3");
// 创建缓冲输入输出流
BufferedReader br = new BufferedReader(
new FileReader(source));
BufferedWriter bw = new BufferedWriter(
new FileWriter(target));
//定义一个变量用于传递数据
String line = null;
while((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
bw.flush();
}
//关闭资源
br.close();
bw.close();
}
}
复制代码
以上为IO中9种复制文件的方式,希望与大家交流,谢谢。
作者:
yantao0401
时间:
2015-8-14 10:45
感觉分清要用字节和字符 就可以了 , 剩下的就是需不需要用缓冲 。 感觉没必要分这么细吧 。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2