需求:在项目的根目录里面创建一个java.txt的文件,然后将这个文件拷贝到file文件夹里面并且重命名为good.txt文件
先以流的方式将java.txt文件读取到内存中,然后再以流的方式将内存中的内容写出到硬盘里面
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* 文件拷贝
* 将java.txt文件拷贝到file文件夹中
*
*/
public class FileCopy {
public static void main(String[] args) {
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream("java.txt");
fos = new FileOutputStream("file" + File.separator + "good.txt");
byte[] arr = new byte[1024];
int length;
while((length = fis.read(arr)) != -1) {
fos.write(arr,0,length);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
fis.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
使用缓冲流进行文件拷贝
Java中提供了BufferedInputStream和BufferedOutputStream缓冲流用来读取和写出, BufferedInputStream读取时会创建一个长度为8192的byte类型数组,程序一次读取8192个字节数据到数组中 使用缓冲流之后就不用再自定义byte类型数组了。
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* 使用缓冲流进行文件拷贝
* 将java.txt文件拷贝到file文件夹中
*
*/
public class BufferFileCopy {
public static void main(String[] args) {
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
//使用缓冲流装饰一下
bis = new BufferedInputStream(new FileInputStream("java.txt"));
bos = new BufferedOutputStream(new FileOutputStream("file" + File.separator + "good.txt"));
int temp;
while((temp = bis.read()) != -1) {
bos.write(temp);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
bis.close();
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Buffer缓冲.png
自定义数组缓冲.png
两者在效率上区别不大,其实java提供的BufferedInputStream和BufferedOutputStream底层使用的也是byte类型的数组,开发中这两种方式都可以使用。
jdk7的新写法
在jdk7中新加入了AutoCloseable接口,IO流中的类都实现了这个接口,这样在读取或者写出操作结束之后,系统会自动close相关资源,开发者不需要再手动close了
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* jdk7新写法,省去了close操作,系统会自动close
* @author Administrator
*
*/
public class IO7Style {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("monkey.txt");
FileOutputStream fos = new FileOutputStream("rabbit.txt");) {
int b;
while ((b = fis.read()) != -1) {
fos.write(b);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
网友评论