【java复习】文件操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yuewen2008/article/details/81909022

文件流—基本概念

文件在程序中是以流的形式来操作的.
流:数据在数据源(文件)和程序(内存)之间经历的路径
输入流:数据从数据源(文件)到程序(内存)的路径.
输出流: 数据从程序(内存)到数据源(文件)的路径.

这里写图片描述

Java IO类图

这里写图片描述

文件流分类:字节流和字符流.
字节流:可以用于读写二进制文件以及任何类型的文件
字符流:可以用于读写文本文件,不能操作二进制文件
这里写图片描述

示例代码

1、File类的基本用法

/*
 * 演示File类的基本用法
 * */

package com.fox.test3;

import java.io.*;

public class Demo11_3 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        File file = new File("D:\\aa.txt");

        //得到文件的路径
        String path =file.getAbsolutePath();
        System.out.println("文件大小:"+file.length());//文件长度
        System.out.println("AbsolutePath是:"+path);//文件绝对路径
        System.out.println("Path是:"+file.getPath());
        System.out.println("文件是否可读:"+file.canRead());//文件谁否可读

        System.out.println("是否路径:"+file.isDirectory());

        //创建文件,创建文件夹
        File f = new File("D:\\ff\\bb.txt");//
        if(!f.exists())
        {
            //文件不存在,创建文件
            try {
                f.createNewFile();//不能创建包含不存在的文件夹的文件
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }else
        {
            System.out.println("文件已经存在");
        }

        File f2 = new File("D:\\ff");
        System.out.println("文件夹是否存在:"+f2.isDirectory());
        if(f2.isDirectory())//这个方法并不是判断是否是目录,而是判断该目录是否已经存在
        {
            System.out.println("文件夹已经存在");
        }else {
            f2.mkdir();//文件夹不存在,创建文件夹
        }

//列出某个文件夹下的所有文件
        File f3 = new File("D:\\xx");
        if(f3.isDirectory())
        {
            File listfiles[] =f3.listFiles();
            for(int i=0;i<listfiles.length;i++)
            System.out.println("文件名是:"+listfiles[i].getName()); 
        }
    }
}

2、FileInputStream类从文件中读取内容到控制台显示

/**
 * 
 *演示读写文件内容 FileInputStream类的用法
 */
package com.fox.test4;
import java.io.*;

public class Demo11_4 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        File f = new File("D:\\aa.txt");
        FileInputStream fis= null;
        //File没有文件的读写能力,没有读写方法,需要使用FileInputStream
        try {
            fis = new FileInputStream(f);

            //定义一个字节数组,存放从文件中读到的内容,相当于缓存
            byte []bytes = new byte[1024];
            int n=0;//实际读取到的字节数

            while((n=fis.read(bytes))!=-1)//read方法返回实际读入缓冲区的字节数,如果因为已经到达文件末尾而没有更多的数据则返回-1
            {
                //把字节转换为String
                String s = new String(bytes,0,n);
                System.out.println(s);
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            //关闭文件流,一定要记得关闭文件流
            try {
                fis.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

3、FileOutputStream类:写数据到文件中去

/*
 * 通过FileOutputStream类写内容到文件中
 * 
 * */
package com.fox.test5;

import java.io.*;

public class Demo11_5 {


    public static void main(String[] args) {
        FileOutputStream fos =null;

        File f = new File("D:\\bb.txt");

        String test ="hha 我是java 欢迎来到我的世界!\r\n";
        String test1 ="hha 我要学java,做一个java攻城师!";

        try {
            fos = new FileOutputStream(f);
            fos.write(test.getBytes());
            fos.write(test1.getBytes());
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            try {
                fos.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

}

4、图片拷贝

/*
 * 演示:图片拷贝
 * 
 * */

package com.fox.test6;

import java.io.*;

public class Demo11_6 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        FileInputStream fis= null;
        FileOutputStream fos= null;
        int n =0;//实际读到的字节数
        try {
            fis= new FileInputStream("c:\\1.jpg");
            fos = new FileOutputStream("d:\\2.jpg");
            byte buf[]= new byte[1024];
            while((n=fis.read(buf))!=-1)
            {
                fos.write(buf);
            }

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            try {
                fis.close();
                fos.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            System.out.println("图片拷贝完成");
        }


    }

}

5、字符流操作:拷贝txt文件

/*
 * 演示文件字符流操作
 * 
 * 拷贝一个txt文件到其他地方
 * */

package com.fox.test7;
import java.io.*;
public class Demo11_7 {

    public static void main(String[] args) {
        FileReader fr =null;
        FileWriter fw =null;
        char buf[]= new char[1024];
        int n=0;
        try {
            fr = new FileReader("c:\\test.txt");
            fw = new FileWriter("d:\\test_copy.txt");

            while((n=fr.read(buf))!=-1) {
                String string = new String(buf,0,n);//不加这一句会有乱码出现
                fw.write(string);
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            try {
                fr.close();
                fw.close();
                System.out.println("文件拷贝完成");
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }

}

6、缓冲字符流

为了提高效率而引入了缓冲字符流,它可以一行一行的读取文件的内容.
BufferedReader和BuferedWriter的使用。

/*
 * 使用BufferedReader 和BufferedWriter演示文本文件的拷贝功能
 * */
package com.fox.test8;
import java.io.*;

public class Demo11_8 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        BufferedReader br =null;
        BufferedWriter bw =null;
        //先创建一个FileReader对象和FileWriter对象
        FileReader fr= null;
        FileWriter fw=null;
        try {
            fr = new FileReader("c:\\test.txt");
            fw= new FileWriter("d:\\test_copy.txt");

            br = new BufferedReader(fr);
            bw = new BufferedWriter(fw);
            //读取文件
            String s="";
            while((s=br.readLine())!=null) {
                System.out.println(s);
                bw.write(s);
                bw.write("\r\n");//需要自己添加换行符
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            try {
                br.close();
                bw.close();
                System.out.println("文件拷贝完成");
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }   
        }
    }
}

猜你喜欢

转载自blog.csdn.net/yuewen2008/article/details/81909022