)File类
)IO流的原理及概念
)IO流的分类
)IO流类的体系
)字节流和字符流
)处理流
)文件拷贝
)处理流
)文件拷贝
)文件分割与合并 File:文件和目录路径名的抽象表示形式,一个File对象可以代表一个文件或目录,但不是完全对应的。建立File对象不会对文件系统产生影响。 /**
* 两个常量
* 1、路径分隔符 ;
* 2、名称分隔符 \(windows) /(linux 等不是windows的)
*/
public class Demo01 {
public static void main(String[] args) {
System.out.println(File.pathSeparator);//;
System.out.println(File.separator);//\
//路径表示形式
String path ="E:\\xp\\test\\2.jpg";//E:\xp\test\2.jpg,\有特殊含义所以要转义,
path="E:"+File.separator+"xp"+File.separator+"test"+File.separator+"2.jpg";//E:\xp\test\2.jpg,这样分隔符可以做到跨平台,用于路径的动态生成。
//推荐方式
path="E:/xp/test/2.jpg";
}
} 绝对路径:windows里面d:\或者D:\,非windows里面/开头。
相对路径: import java.io.File;
/**
* 相对路径与绝对路径构造 File对象
* 1、相对路径
File(String parent, String child) ==>File("E:/xp/test","2.jpg")
File(File parent, String child) ==> File(new File("E:/xp/test"),"2.jpg")
2、绝对路径
File(String name);
*/
public class Demo02 {
public static void main(String[] args) {
String parentPath ="E:/xp/test";
String name ="2.jpg";
//相对路径,相对于父路径E:/xp/test,
File src =new File(parentPath,name);
src =new File(new File(parentPath),name);//src为E:\xp\test\2.jpg,
//输出
System.out.println(src.getName());//2.jpg
System.out.println(src.getPath());//E:\xp\test\2.jpg,这里并不会检查文件是否存在在,
//绝对路径
src =new File("E:/xp/test/2.jpg");//E:\xp\test\2.jpg
System.out.println(src.getName());//2.jpg
System.out.println(src.getPath());//E:\xp\test\2.jpg
//没有盘符: 以 user.dir(当前工程路径)构建
src =new File("test.txt");//src为test.txt
src =new File(".");//src为.,点表示当前路径。
System.out.println(src.getName());//.
System.out.println(src.getPath());//.
System.out.println(src.getAbsolutePath());//E:\workspace2014625\143-168\.
}
} /**
* 常用方法:
1、文件名
getName() 文件名、路径名
getPath()路径名
getAbsoluteFile() 绝对路径所对应的File对象
getAbsolutePath() 绝对路径名
getParent() 父目录 ,相对路径的父目录,可能为null 如. 删除本身后的结果
2、判断信息
exists()
canWrite()
canRead()
isFile()
isDirectory()
isAbsolute():消除平台差异,ie以盘符开头,其他以/开头
3、长度 字节数 不能读取文件夹的长度
length()
4、创建、删除
createNewFile() 不存在创建新文件,存在则创建失败返回false。
delete() 删除文件
static createTempFile(前缀3个字节长,后缀默认.temp) 默认路径为当前工程目录,
staticcreateTempFile(前缀3个字节长,后缀默认.temp,目录)
deleteOnExit() 退出虚拟机删除,常用于删除临时文件
*/
public class Demo03 {
public static void main(String[] args) {
test1();
test2();
try {
test3();
} catch (IOException e) {
e.printStackTrace();
System.out.println("文件操作失败");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//创建删除文件
public static void test3() throws IOException, InterruptedException{
//createNewFile() 不存在创建新文件
//String path="E:/xp/test/con"; //con系统关键字
String path="E:/xp/test/200.jpg";
//String path="E:/xp/test/1.jpg";
File src =new File(path);//src为E:\xp\test\200.jpg
if(!src.exists()){
boolean flag =src.createNewFile();//xp/test目录要存在。
System.out.println(flag?"成功":"失败");
}
//删除文件
boolean flag =src.delete();
System.out.println(flag?"成功":"失败");
//static createTempFile(前缀3个字节长,后缀默认.temp) 默认临时空间
//static createTempFile(前缀3个字节长,后缀默认.temp,目录)
File temp= File.createTempFile("tes", ".temp",new File("e:/xp/test"));//tes3855104819688816342.temp
Thread.sleep();
temp.deleteOnExit(); //退出即删除
}
//2、判断信息
//3、长度 length()
public static void test2(){
String path0 ="2.txt";
String path="E:/xp/test/200.jpg";
String path1="E:/xp/test";
File src =new File(path1);//src为E:\xp\test\200.jpg
//是否存在
System.out.println("文件是否存在:"+src.exists());
//是否可读 写 canWrite() canRead()
System.out.println("文件是否可写"+src.canWrite());
System.out.println("============");
//isFile()
//isDirectory()
if(src.isFile()){
System.out.println("文件");
}else if(src.isDirectory()){
System.out.println("文件夹");
}else{
System.out.println("文件不存在");
}
System.out.println("是否为绝对路径"+src.isAbsolute());
System.out.println("长度为:"+src.length());//字节数
}
//1、名称
public static void test1(){
File src0 =new File("E:/xp/test/2.jpg");///scr为E:\xp\test\2.jpg
//建立联系
File src =new File("2.txt");//src为2.txt
System.out.println(src.getName()); //返回名称,2.txt
System.out.println(src.getPath()); //如果是绝对路径,返回完整路径,否则相对路径
System.out.println(src.getAbsolutePath());//返回绝对路径,E:\workspace2014625\143-168\2.txt
System.out.println(src.getParent());//返回上一级目录,如果是相对,返回null
}
} import java.io.File;
import java.io.FilenameFilter;
/**
* 5、操作目录
mkdir() 创建目录,必须确保 父目录存在,如果不存在,创建失败
mkdirs() 创建目录,如果父目录链不存在一同创建
list() 文件|目录 名字符串形式
listFiles()
static listRoots() 根路径
*/
public class Demo04 {
public static void main(String[] args) {
test1();
String path ="E:/xp/test/";
File src =new File(path); //文件夹,src为E:\xp\test
if(src.isDirectory()){ //E:/xp/test/必须存在并且为目录
String[] subNames =src.list();//src下面的所有子文件和子文件夹,[a.txt, b.png, c.pdf, d.xml, parent]
for(String temp:subNames){
System.out.println(temp);//a.txt,b.png,c.pdf,d.xml,parent
}
File[] subFiles =src.listFiles();//[E:\xp\test\a.txt, E:\xp\test\b.png, E:\xp\test\c.pdf, E:\xp\test\d.xml, E:\xp\test\e.java, E:\xp\test\parent]
for(File temp:subFiles){
System.out.println(temp.getAbsolutePath());
/*E:\xp\test\a.txt
E:\xp\test\b.png
E:\xp\test\c.pdf
E:\xp\test\d.xml
E:\xp\test\parent*/
}
for(File temp:subFiles){
System.out.println(temp.getPath());
/*E:\xp\test\a.txt
E:\xp\test\b.png
E:\xp\test\c.pdf
E:\xp\test\d.xml
E:\xp\test\parent*/
}
//命令设计模式,里面是一个过滤器,必须重写accept方法,
subFiles =src.listFiles(new FilenameFilter(){
//FilenameFilter是一个接口,接口是不能new的,只能创建匿名对象。这是接口的声明,只不过声明和实例化在一起。
/*public
interface FilenameFilter {
/**
* Tests if a specified file should be included in a file list.
*
* @param dir the directory in which the file was found.
* @param name the name of the file.
* @return <code>true</code> if and only if the name should be
* included in the file list; <code>false</code> otherwise.
*//*
boolean accept(File dir, String name);
}*/
@Override
/**
* dir 代表src,dir为E:\xp\test,在一个一个的过滤的时候name分别为a.txt,b.png,c.pdf,d.xml,e.java,parent(src下子文件和子文件夹的名称)
*/
public boolean accept(File dir, String name) {//把src一个一个的过滤,把满足条件的获取出来,
System.out.println(dir.getAbsolutePath());
return new File(dir,name).isFile()&&name.endsWith(".java");//new File(dir,name)根据路径和文件名创建文件。
}
});
for(File temp:subFiles){//subFiles为[E:\xp\test\e.java]
System.out.println(temp.getAbsolutePath());//E:\xp\test\e.java
}
}
}
public static void test1(){
String path ="E:/xp/test/parent/p/test.jpg";//最后创建的是test.jpg这个文件夹。
File src =new File(path);
src.mkdir();
src.mkdirs();//目录不存在则一同创建文件夹
}
} /**
* 输出子孙级目录|文件的名称(绝对路径)
* 1、listFiles()
* 2、递归
* static listRoots() 根路径
*/
public class Demo05 {
public static void main(String[] args) {
String path ="E:/xp/test";
File parent =new File(path);
printName(parent);
File[] roots =File.listRoots();
System.out.println(Arrays.toString(roots));
for(File temp:roots){
//printName(temp);
}
}
/**
* 输出路径
*/
public static void printName(File src){
if(null==src || !src.exists()){
return ;
}
System.out.println(src.getAbsolutePath());
if(src.isDirectory()){ //文件夹
for(File sub:src.listFiles()){
printName(sub);
}
}
}
}
IO流:
.源头与目的地,程序与文件|数组|网络连接|数据库
.IO流的分类
)以程序为中心,进来叫输入流,出去叫输出流。 )按数据分为:字节流(二进制,可以处理一切文件,包括纯文本、doc、音频、视频。字节流是对程序来说的,程序能看懂的),字符流(只能处理文本文件,全部为可见字符,对人类来说的,人类能看懂的)。 )按功能分为:节点流(包裹源头),处理流(增强功能,提高性能)
.字符流与字节流与文件
InputStream和OutputStream都是抽象的, )字节流:分为输入流[抽象类为InputStream]和输出流[抽象类为OutputStream](相对程序来说)。FileInputStream和FileOutputStream。
)字符流: 输入流[抽象类为Reader]和输出流[抽象类为Writer]。FileReader和FileWriter。 一、读取文件(四个步骤)
)建立联系:File对象 是程序为中心是源头
)选择流:文件输入流 接口InputStream 实现类FileInputStream
)操作:byte[] car = new byte[]+read+读取大小,输出
)释放资源 /**
* 文件的读取
* 1、建立联系 File对象
2、选择流 文件输入流 InputStream FileInputStream
3、操作 : byte[] car =new byte[1024]; +read+读取大小
输出
4、释放资源 :关闭
*/
public class Demo01 {
public static void main(String[] args) {
//1、建立联系,File对象,文件要存在。
File src =new File("e:/xp/test/a.txt");
//2、选择流
InputStream is =null; //提升作用域
try {
is =new FileInputStream(src);//FileInputStream为InputStream的子类(只要程序与外界存在联系就有异常),
//3、操作,不断读取,按字节读每次读1024个字节,相当于一个缓冲数组
byte[] car =new byte[];
int len =; //接收 实际读取大小,len表示每次实际装入到car数组中的个数,只有左后一个小于1024,在下次就为-1,
//循环读取
StringBuilder sb =new StringBuilder();
while(-!=(len=is.read(car))){
//输出 字节数组转成字符串
String info =new String(car,,len);
sb.append(info);
}
System.out.println(sb.toString());
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("文件不存在");
} catch (IOException e) {
e.printStackTrace();
System.out.println("读取文件失败");
}finally{
try {
//4、释放资源内存区域,断开引用
if (null != is) {
is.close();
}
} catch (Exception e2) {
System.out.println("关闭文件输入流失败");
}
}
} } 二、写出文件(四个步骤)
)建立联系:File对象 以程序为中心是目的地
)选择流:文件输出流 接口OutputStream 实现类FileOutputStream
)操作:byte[] car = new byte[]+read+读取大小,输出
)释放资源
/**
* 写出文件
1、建立联系 File对象 目的地
2、选择流 文件输出流 OutputStream FileOutputStream
3、操作 : write() +flush
4、释放资源 :关闭
*/
public class Demo02 {
public static void main(String[] args) {
//1、建立联系,File对象,目的地
File dest =new File("e:/xp/test/test.txt");
//2、选择流 文件输出流 OutputStream FileOutputStream
OutputStream os =null;
//以追加形式 写出文件 必须为true,否则为覆盖文件
try {
os =new FileOutputStream(dest,true);
//3、操作
String str="过头如果 \r\n";
//字符串转字节数组
byte[] data =str.getBytes();
// /[98, 106, 115, 120, 116, 32, 105, 115, 32, 118, 101, 114, 121, 32, 103, 111, 111, 100, 32, 13, 10]
os.write(data,,data.length);
os.flush(); //强制刷新出去,因为相当于一个管道。管道没满就不出去,所以要手动出去。
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("文件未找到");
} catch (IOException e) {
e.printStackTrace();
System.out.println("文件写出失败");
}finally{
//4、回收内存,断开引用,释放资源 :关闭
try {
if (null != os) {
os.close();
}
} catch (Exception e2) {
System.out.println("关闭输出流失败");
}
}
}
} 文件的拷贝:
文件从源地到目的地,中间通过程序。先把文件从源地Read到程序,然后从程序write到目的地,读一点写一点。
四个步骤:
、建立联系 File对象 源头 目的地
、选择流
文件输入流 接口InputStream 实现类FileInputStream
文件输出流 接口OutputStream 实现类FileOutputStream
、操作:拷贝
byte[] flush =new byte[];
int len =;
while(-!=(len=输入流.read(flush))){
输出流.write(flush,,len)
}
输出流.flush
、释放资源 :关闭 两个流 文件的拷贝:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream; /**
1、建立联系 File对象 源头 目的地
2、选择流
文件输入流 InputStream FileInputStream
文件输出流 OutputStream FileOutputStream
3、操作 : 拷贝
byte[] flush =new byte[1024];
int len =0;
while(-1!=(len=输入流.read(flush))){
输出流.write(flush,0,len)
}
输出流.flush
4、释放资源 :关闭 两个流
*/
public class CopyFileDemo {
public static void main(String[] args) {
String src ="E:/xp/test/1.txt";//源文件必须存在,并且是文件不是文件夹,文件夹不能用流读取。
String dest="e:/xp/test/2.txt";//目的文件可以不存在
try {
copyFile(src,dest);
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("文件不存在");
} catch (IOException e) {
e.printStackTrace();
System.out.println("拷贝文件失败|关闭流失败");
}
}
/**
* 文件的拷贝
* @param 源文件路径
* @param 目录文件路径
* @throws FileNotFoundException,IOException
*/
public static void copyFile(String srcPath,String destPath) throws FileNotFoundException,IOException {
//1、建立联系 源(存在且为文件) +目的地(文件可以不存在)
File src =new File(srcPath);//src为E:\xp\test\1.txt,内容为a-z
File dest =new File(destPath);//dest为e:\xp\test\2.txt
if(!src.isFile()){ //不是文件或者为null
System.out.println("只能拷贝文件");
throw new IOException("只能拷贝文件");//throw之后方法就出去了,后面就不用加return
}
//2、选择流
InputStream is =new FileInputStream(src);//如果src是文件夹,这里就会出错,因为文件夹是没有流来读取的,
OutputStream os =new FileOutputStream(dest);
//3、文件拷贝 循环+读取+写出
byte[] flush =new byte[];//每次读10个字节到flush数组里面去
int len =;
//读取
//len=is.read(flush);
//len=20,flush为长度为20的数组
while(-!=(len=is.read(flush))){
//写出
os.write(flush, , len);//len为实际的长度 //每次循环,从源读取10到flush,然后从flush写入到目的地,再次读取10个到flush然后写入到目的地,读一点写一点。
//flush=[97, 98, 99, 100, 101, 102, 103, 104, 105, 106],len=10,2.txt内容为abcdefghij
//flush=[107, 108, 109, 110, 111, 112, 113, 114, 115, 116],len=10,2.txt内容为abcdefghijklmnopqrst
//flush=[117, 118, 119, 120, 121, 122, 113, 114, 115, 116],len=6,2.txt内容为abcdefghijklmnopqrstuvwxyz
}
os.flush(); //强制刷出 //关闭流,后打开先关闭,os和is不可能为空,所以关闭之前不用对os和is进行判空,
os.close();
is.close();
}
} 文件夹的拷贝:
.递归查找子孙文件|文件夹
.如果是文件,赋值(FileIO流)即可,如果是文件夹创建即可。
A
/ | \
.txt aa b.png
|
.txt /**
* 文件夹的拷贝
* 1、文件 赋值 copyFile
* 2、文件 创建 mkdirs()
* 3、递归查找子孙级
*/
public class CopyDir {
public static void main(String[] args) {
//源目录
String srcPath="E:/xp/test/a";//目录结构如下
/* a
/ | \
1.txt aa b.png
|
2.txt */ //目标目录
String destPath="E:/xp/test/b";//把a文件夹赋值到b文件夹的下面
//FileUtil.copyDir(srcPath,destPath);
copyDir(srcPath,destPath);
} /**
* 拷贝文件夹
* @param src 源路径
* @param dest 目标路径
*/
public static void copyDir(String srcPath,String destPath){
File src=new File(srcPath);
File dest =new File(destPath);
copyDir(src,dest);
} /**
* 拷贝文件夹
* @param src 源File对象
* @param dest 目标File对象
*/
public static void copyDir(File src,File dest){//src为E:\xp\test\a,dest为E:\xp\test\b
if(src.isDirectory()){ //文件夹
System.out.println(src.getName());//a
try {
dest =new File(dest,src.getName());//dest为E:\xp\test\b\a,在dest下创建一个文件夹名字为src.getName()
new File(dest,"a2");
} catch (Exception e) {
e.printStackTrace();
}
}
try {
copyDirDetail(src,dest);
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 拷贝文件夹细节
* @param src
* @param dest
*/
public static void copyDirDetail(File src,File dest){
if(src.isFile()){ //文件
try {
FileUtil.copyFile(src, dest);
/*public static void copyFile(File src,File dest) throws FileNotFoundException,IOException {
if(! src.isFile()){ //不是文件或者为null
System.out.println("只能拷贝文件");
throw new IOException("只能拷贝文件");
}
//dest为已经存在的文件夹,不能建立于文件夹同名的文件
if(dest.isDirectory()){
System.out.println(dest.getAbsolutePath()+"不能建立于文件夹同名的文件");
throw new IOException(dest.getAbsolutePath()+"不能建立于文件夹同名的文件");
}
//2、选择流
InputStream is =new BufferedInputStream(new FileInputStream(src));
OutputStream os =new BufferedOutputStream(new FileOutputStream(dest));
//3、文件拷贝 循环+读取+写出
byte[] flush =new byte[1024];
int len =0;
//读取
while(-1!=(len=is.read(flush))){
//写出
os.write(flush, 0, len);
}
os.flush(); //强制刷出
//关闭流
os.close();
is.close();
}*/
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}else if(src.isDirectory()){ //文件夹
//确保目标文件夹存在
dest.mkdirs();//此时b文件夹创建,并且b中创建了a文件夹,E:\xp\test\b\a->E:\xp\test\b\a\aa
File[] subFiles =src.listFiles();//[E:\xp\test\a\1.txt, E:\xp\test\a\aa, E:\xp\test\a\b.png]->[E:\xp\test\a\aa\2.txt]
//获取下一级目录|文件
for(File sub:src.listFiles()){
copyDirDetail(sub,new File(dest,sub.getName()));
}
}
}
} /**
* 文件操作
* 1、文件拷贝
* 2、文件夹拷贝 拒绝自己拷贝给自己
* @author Administrator
*
*/
public class FileUtil {
/**
* 拷贝文件夹
* @param src 源路径
* @param dest 目标路径
* @throws IOException
* @throws FileNotFoundException
*/
public static void copyDir(String srcPath,String destPath) throws FileNotFoundException, IOException{
//拒绝自己拷贝给自己
if(srcPath.equals(destPath)){
return ;
}
File src=new File(srcPath);
File dest =new File(destPath);
copyDir(src,dest);
} /**
* 拷贝文件夹
* @param src 源File对象
* @param dest 目标File对象
* @throws IOException
* @throws FileNotFoundException
*/
public static void copyDir(File src,File dest) throws FileNotFoundException, IOException{
if(src.isDirectory()){ //文件夹
dest =new File(dest,src.getName());
if(dest.getAbsolutePath().contains(src.getAbsolutePath())){
System.out.println("父目录不能拷贝到子目录中");
return;
}
}
copyDirDetail(src,dest);
} /**
* 拷贝文件夹细节
* @param src
* @param dest
*/
public static void copyDirDetail(File src,File dest) throws FileNotFoundException,IOException{
if(src.isFile()){ //文件
try {
FileUtil.copyFile(src, dest);
} catch (FileNotFoundException e) {
//e.printStackTrace();
throw e;
} catch (IOException e) {
//e.printStackTrace();
throw e;
}
}else if(src.isDirectory()){ //文件夹
//确保目标文件夹存在
dest.mkdirs();
//获取下一级目录|文件
for(File sub:src.listFiles()){
copyDirDetail(sub,new File(dest,sub.getName()));
}
}
} /**
* 文件的拷贝
* @param 源文件路径
* @param 目录文件路径
* @throws FileNotFoundException,IOException
* @return
*/
public static void copyFile(String srcPath,String destPath) throws FileNotFoundException,IOException {
//1、建立联系 源(存在且为文件) +目的地(文件可以不存在)
copyFile(new File(srcPath),new File(destPath));
}
/**
* 文件的拷贝
* @param 源文件File对象
* @param 目录文件File对象
* @throws FileNotFoundException,IOException
* @return
*/
public static void copyFile(File src,File dest) throws FileNotFoundException,IOException {
if(! src.isFile()){ //不是文件或者为null
System.out.println("只能拷贝文件");
throw new IOException("只能拷贝文件");
}
//dest为已经存在的文件夹,不能建立于文件夹同名的文件
if(dest.isDirectory()){
System.out.println(dest.getAbsolutePath()+"不能建立于文件夹同名的文件");
throw new IOException(dest.getAbsolutePath()+"不能建立于文件夹同名的文件");
} //2、选择流
InputStream is =new BufferedInputStream(new FileInputStream(src));
OutputStream os =new BufferedOutputStream(new FileOutputStream(dest));
//3、文件拷贝 循环+读取+写出
byte[] flush =new byte[];
int len =;
//读取
while(-!=(len=is.read(flush))){
//写出
os.write(flush, , len);
}
os.flush(); //强制刷出 //关闭流
os.close();
is.close();
}
} 字符流:
节点流:Reader FileReader,Writer FileWrite,
一、纯文本读取
.建立联系
.选择流 Reader FileReader
.读取 char[] flush = new char[]
.关闭
二、纯文本写出
.建立联系
.选择流 Writer FileWriter
.读取 write(字符数组,,长度) + flush
write(字符串)
append(字符串)
.关闭 /**
* 纯文本读取
*/
public class Demo01 {
public static void main(String[] args) {
//创建源
File src =new File("E:/xp/test/a.txt");
//选择流
Reader reader =null;
try {
reader =new FileReader(src);
//读取操作
char[] flush =new char[];
int len =;
while(-!=(len=reader.read(flush))){
//字符数组转成 字符串
String str =new String(flush,,len);
System.out.println(str);
/*啊啊啊abcdefg
hijklmnopq
rstuvwxyz*/
}
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("源文件不存在");
} catch (IOException e) {
e.printStackTrace();
System.out.println("文件读取失败");
}finally{
try {
if (null != reader) {
reader.close();
}
} catch (Exception e2) {
}
}
} } /**
* 写出文件
*/
public class Demo02 {
public static void main(String[] args) {
//创建源
File dest =new File("e:/xp/test/char.txt");
//选择流
Writer wr =null;
try {
//true为追加文件,false或者不写是覆盖文件
wr =new FileWriter(dest,false);
//写出
String msg ="追加.....锄禾日当午\r\n码农真辛苦\r\n一本小破书\r\n一读一上午";
wr.write(msg);
wr.append("倒萨发了看电视剧 ");
wr.append("倒死死死死死死死死死死死萨发了看电视剧 ");
wr.flush();//这里才写入到文件
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}finally{
try {
if (null != wr) {
wr.close();
}
} catch (Exception e2) {
}
}
} } /**
* 纯文本拷贝
*/
public class CopyFileDemo {
public static void main(String[] args) {
//创建源 仅限于 字符的纯文本
File src =new File("E:/xp/test/Demo03.java");
File dest =new File("e:/xp/test/char.txt");
//选择流
Reader reader =null;
Writer wr =null;
try {
reader =new FileReader(src);
wr =new FileWriter(dest);
//读取操作
char[] flush =new char[];
int len =;
while(-!=(len=reader.read(flush))){
wr.write(flush, , len);
}
wr.flush();//强制刷出,即使不加flush,关闭流的时候也会刷新出去。
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("源文件不存在");
} catch (IOException e) {
e.printStackTrace();
System.out.println("文件读取失败");
}finally{
try {//关闭,先打开的后关闭
if (null != wr) {
wr.close();
}
} catch (Exception e2) {
}
try {
if (null != reader) {
reader.close();
}
} catch (Exception e2) {
}
} } }