一.关于字节流的四种复制
1. method1(file1,file2); //单个字节复制
2.method2(file1,file2);//数组个字节复制,效率通常是单字节复制的1024倍
3.method3(file1,file2);//高效类单字节复制
4.method4(file1,file2);//高效类字节数组复制,效率最高
package FileInputOutputStream.CopyTwo;
import java.io.*;
public class CopyFour {
public static void main(String[] args) throws IOException {
File file1=new File("C:\\Users\\86159\\Desktop\\untitled\\src\\FileInputOutputStream\\CopyTwo\\Hello.txt");
File file2=new File("C:\\Users\\86159\\Desktop\\untitled\\src\\FileInputOutputStream\\CopyTwo\\World.txt");
//method1(file1,file2); //单个字节复制
// method2(file1,file2);//数组个字节复制,效率通常是单字节复制的1024倍
//method3(file1,file2);//高效类单字节复制
method4(file1,file2);//高效类字节数组复制,效率最高
}
public static void method1(File file1,File file2) throws IOException {
FileInputStream inputStream=new FileInputStream(file1);
FileOutputStream outputStream=new FileOutputStream(file2);
int by;
while((by=inputStream.read())!=-1){
outputStream.write(by);
}
inputStream.close();
outputStream.close();
}
public static void method2(File file1, File file2) throws IOException {
FileInputStream inputStream=new FileInputStream(file1);
FileOutputStream outputStream=new FileOutputStream(file2);
byte[] bytes=new byte[1024];
int len=0;
while((len=inputStream.read(bytes))!=-1){
outputStream.write(bytes,0,len); //必须是0-len
}
inputStream.close();
outputStream.close();
}
public static void method3(File file1, File file2) throws IOException {
BufferedInputStream inputStream=new BufferedInputStream(new FileInputStream(file1));
BufferedOutputStream outputStream=new BufferedOutputStream(new FileOutputStream(file2));
int len=0;
while((len=inputStream.read())!=-1){
outputStream.write(len); //必须是0-len
}
inputStream.close();
outputStream.close();
}
public static void method4(File file1, File file2) throws IOException {
BufferedInputStream inputStream=new BufferedInputStream(new FileInputStream(file1));
BufferedOutputStream outputStream=new BufferedOutputStream(new FileOutputStream(file2));
byte[] bytes=new byte[1024];
int len=0;
while((len=inputStream.read(bytes))!=-1){
outputStream.write(bytes,0,len); //必须是0-len
}
inputStream.close();
outputStream.close();
}
}
字符流无较大差别(只举一个):
public static void method(File file1, File file2) throws IOException { //字符缓冲区一次读写一个字符
BufferedReader inputStream=new BufferedReader(new FileReader(file1));
BufferedWriter outputStream=new BufferedWriter(new FileWriter(file2));
char[] bytes=new char[1024];
int len=0;
while((len=inputStream.read(bytes))!=-1) {outputStream.write(bytes, 0, len);} //必须是0-len
inputStream.close();
outputStream.close();
}
二.打印流
1.字节打印流:PrintOutputStream
2.字符打印流:PrintWriter
3.通过打印流的方法来复制文本,具体解析我在代码中解释,如下:
package IODemo.PrintWriterDemo.DemoOne;
import java.io.*;
//PrinterOutputStream 为标准字符输入流
//PrinterWriter 为标准字符输入流
public class Demo {
public static void main(String[] args) {
File file=new File("C:\\Users\\86159\\Desktop\\untitled\\src\\IODemo\\PrintWriterDemo\\DemoOne\\heihei.txt");
File file2=new File("C:\\Users\\86159\\Desktop\\untitled\\src\\IODemo\\PrintWriterDemo\\DemoOne\\heiheiCopy.txt");
PrintWriter pw=null;
try {
pw=new PrintWriter(file);
pw.println("liubi");
//其实等价于
// bw.write(); (BufferedWriter bw)
// bw.newLian()
// bw.flush()
pw.println(100);
pw.print("haha");
} catch (FileNotFoundException e) {
System.out.println("找不到该文件");
}finally {
pw.close();//要关闭才能打印
}
BufferedReader br=null;
try {
br=new BufferedReader(new FileReader(file));
String str=null;
{
PrintWriter pw2=new PrintWriter(file2);
try {
while ((str= br.readLine())!=null){
pw2.println(str);
}
} catch (IOException e) {
e.printStackTrace();
}finally{
pw2.close();
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally {
if(br!=null)
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}