package flinkdemo.threadPool;
import java.io.*;
/**
* @author zhangkai
* @create 2020/1/6
*/
public class FileCopy {
public static void main(String[] args) {
String inFilePath = "/Users/zhangkai/test/fileTest/a.txt";
String outFilePath = "/Users/zhangkai/test/fileTest/aCopy.txt";
FileInputStream inputStream = null;
FileOutputStream outputStream = null;
Reader reader = null;
Writer writer = null;
BufferedReader bufferedReader = null;
BufferedWriter bufferedWriter = null;
try {
// 以字节为单位读取
inputStream = new FileInputStream(inFilePath);
outputStream = new FileOutputStream(outFilePath,true);
int numCnt = 1;
// 以字节为单位读取,一次读一个字节
int readBytes = 0;
while ((readBytes = inputStream.read()) != -1){
outputStream.write(readBytes);
System.out.println(" count is " + numCnt);
numCnt ++;
}
// 以字节为单位读取,一次读取整个文件
int available = inputStream.available();
byte[] bytesAll = new byte[available];
while ((available = inputStream.read(bytesAll)) != -1){
outputStream.write(bytesAll,0,available);
System.out.println(" count is " + numCnt);
System.out.println(available + " " + available);
numCnt ++;
}
// 以字节为单位读取,一次读多个字节(例如1024个字节)
byte[] bytes = new byte[20];
while ((readBytes = inputStream.read(bytes)) != -1){
outputStream.write(bytes,0,readBytes);
System.out.println(" count is " + numCnt);
numCnt ++;
}
// 以字节为单位读取,第三种方式效率最高,第二种方式文件太大容易oom
// 以字符为单位读取
File infile = new File(inFilePath);
File outfile = new File(outFilePath);
reader = new InputStreamReader(new FileInputStream(infile));
writer = new OutputStreamWriter(new FileOutputStream(outfile));
int readChar = 0;
// 以字符为单位读取,一次读一个字节
while ((readChar = reader.read()) != -1){
writer.write(readChar);
System.out.println(" count is " + numCnt);
numCnt ++;
}
// 以字符为单位,一次读取多个字符,例如20个字符
char[] chars = new char[20];
while((readChar = reader.read(chars))!= -1){
writer.write(chars,0,readChar);
System.out.println(" count is " + numCnt);
numCnt ++;
}
// 以行为单位读取文件,
bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(infile)));
// bufferedReader = new BufferedReader(new FileReader(infile));
bufferedWriter = new BufferedWriter(new FileWriter(outfile));
String readLine = null;
while ((readLine = bufferedReader.readLine()) != null){
System.out.println(readLine);
bufferedWriter.write(readLine + "\n");
}
System.out.println(" file copy ok");
}catch (FileNotFoundException e){
System.out.println(" file not found ");
e.printStackTrace();
}catch (IOException e){
System.out.println(" io Exception");
e.printStackTrace();
}finally {
try {
if(inputStream != null){
inputStream.close();
}
if(outputStream != null){
outputStream.close();
}
if(reader != null){
reader.close();
}
if(writer != null) {
writer.close();
}
if(bufferedReader!=null){
bufferedReader.close();
}
if(bufferedWriter != null){
bufferedWriter.close();
}
}catch (IOException e){
e.printStackTrace();
}
}
}
}