java12 File类

1)File类
2)IO流的原理及概念
3)IO流的分类
4)IO流类的体系
5)字节流和字符流
6)处理流
7)文件拷贝
8)处理流
9)文件拷贝
10)文件分割与合并

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(10000);        
        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流:
1.源头与目的地,程序与文件|数组|网络连接|数据库
2.IO流的分类
    1)以程序为中心,进来叫输入流,出去叫输出流。    2)按数据分为:字节流(二进制,可以处理一切文件,包括纯文本、doc、音频、视频。字节流是对程序来说的,程序能看懂的),字符流(只能处理文本文件,全部为可见字符,对人类来说的,人类能看懂的)。    3)按功能分为:节点流(包裹源头),处理流(增强功能,提高性能)
3.字符流与字节流与文件
    InputStream和OutputStream都是抽象的,    1)字节流:分为输入流[抽象类为InputStream]和输出流[抽象类为OutputStream](相对程序来说)。FileInputStream和FileOutputStream。
    2)字符流:    输入流[抽象类为Reader]和输出流[抽象类为Writer]。FileReader和FileWriter。
    
一、读取文件(四个步骤)
1)建立联系:File对象 是程序为中心是源头
2)选择流:文件输入流  接口InputStream  实现类FileInputStream 
3)操作:byte[] car = new byte[1024]+read+读取大小,输出
4)释放资源


/**
 * 文件的读取
 * 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[1024];
            int len =0; //接收 实际读取大小,len表示每次实际装入到car数组中的个数,只有左后一个小于1024,在下次就为-1,
            //循环读取
            StringBuilder sb =new StringBuilder();
            while(-1!=(len=is.read(car))){
                //输出  字节数组转成字符串
                String info =new String(car,0,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("关闭文件输入流失败");
            }
        }
    }

}


二、写出文件(四个步骤)
1)建立联系:File对象 以程序为中心是目的地
2)选择流:文件输出流 接口OutputStream  实现类FileOutputStream 
3)操作:byte[] car = new byte[1024]+read+读取大小,输出
4)释放资源
/**
 * 写出文件
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,0,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到目的地,读一点写一点。
四个步骤:
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、释放资源 :关闭 两个流



文件的拷贝:
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];//每次读10个字节到flush数组里面去
            int len =0;
            //读取
            //len=is.read(flush);
            //len=20,flush为长度为20的数组
            while(-1!=(len=is.read(flush))){
                //写出
                os.write(flush, 0, 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();
        }
}




文件夹的拷贝:
1.递归查找子孙文件|文件夹
2.如果是文件,赋值(FileIO流)即可,如果是文件夹创建即可。
      A
    / | \
1.txt aa b.png
      |
    2.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[1024];
        int len =0;
        //读取
        while(-1!=(len=is.read(flush))){
            //写出
            os.write(flush, 0, len);
        }
        os.flush(); //强制刷出
        
        //关闭流
        os.close();
        is.close();
    }
}



字符流:
  节点流:Reader FileReader,Writer FileWrite,
一、纯文本读取
1.建立联系
2.选择流 Reader FileReader
3.读取 char[] flush = new char[1024]
4.关闭
二、纯文本写出
1.建立联系
2.选择流 Writer FileWriter
3.读取 write(字符数组,0,长度) + flush
       write(字符串)
       append(字符串)
4.关闭



/**
 * 纯文本读取
 */
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[10];
            int len =0;
            while(-1!=(len=reader.read(flush))){
                //字符数组转成 字符串
                String str =new String(flush,0,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[1024];
            int len =0;
            while(-1!=(len=reader.read(flush))){
                wr.write(flush, 0, 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) {
            }
        }
    
    }

}

 

posted @ 2015-09-23 21:30  无天666  阅读(407)  评论(0编辑  收藏  举报