欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java文件读写操作之io流

程序员文章站 2024-03-04 21:02:00
...

java文件读写操作之io流
File类方法:
File():构造函数,一般是依据文件所在的指定位置来创建文件对象。
CanWrite():返回文件是否可写。
CanRead():返回文件是否可读。
CompareTo(File pathname):检查指定文件路径间的顺序。
Delet():从文件系统内删除该文件。
DeleteOnExit():程序顺利结束时从系统中删除文件。
Equals(Object obj):检查特定对象的路径名是否相等。
Exists():判断文件夹是否存在。
GetAbsoluteFile():返回文件的完整路径。
GetAbsolutePath():返回文件的完整路径。
GetName():返回文件名称。
GetParent():返回文件父目录路径。
GetPath():返回文件的潜在相对路径。
GetParentFile():返回文件所在文件夹的路径。
HashCode():返回文件哈希码。
IsDirectory():判断该路径指示的是否是文件。
IsFile():判断该路径指示的是否是文件。
LastModified() :返回文件的最后修改时间标志。
Length():返回文件长度。
List():返回文件和目录清单。
Mkdir():生成指定的目录。
RenameTo(File dest):更名文件。
SetReadOnly():将文件设置为可读。
ToString():返回文件状态的字符串。
ToURL():将文件的路径字符串转换成URL

File.GetCreationTime 读取创建时间
file.SetCreationTime 设置创建时间
File.GetLastAccessTime 读取最后访问时间
File.SetLastAccessTime 设置最后访问时间
File.GetLastWriteTime 读取最后修改时间
File.SetLastWriteTime 设置最后修改时间
File.GetAttributes 读取文件属性

File.SetAttributes 设置文件属性

字节输出输入流:

package io;

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;
/*
 * 字节输入输出流
 * 输出流:超类 OutputStre,对文件的写入使用子类的FileOutputStream
 * 输入流:超类 InputStre,对文件的读出使用子类的FileInputStream
 */
public class FileDome {

    //*************************out方法写入文件***************************
    private static void out() {
        File f1=new File("C:\\Users\\龙布天下\\Desktop\\box.txt");//确定目标文件

        try {
            //参数1为文件路径,参数2为是否追加文件到写入文件的末尾
            OutputStream out=new FileOutputStream(f1,true);//构建一个文件输出流对象

            String info="123ABCabc王文龙\r\n";//声明要写入out流文件中的数据

            byte[] s=info.getBytes();//写入数据的byte数组

            try {
                out.write(s);//写入out数据
                out.close();//关闭流
                System.out.println("写入数据成功");
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    //*************************In方法输出文件***************************
    public static void in() {
        File f1=new File("C:\\Users\\龙布天下\\Desktop\\box.txt");//确定目标文件
        try {
            InputStream in=new FileInputStream(f1);//构建一个文件输入流对象
            try {
                byte[] b=new byte[1024];
                StringBuffer sb=new StringBuffer();
                //把读到的数据写入到byte数组中
                while(in.read(b)!=-1) {
                    sb.append(new String(b));
                }
                in.close();//关闭流
                System.out.println(sb);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }


    public static void main(String[] args) {
        //File类表示一个文件或目录
        out();//调用写入文件流的方法
        in();//调入读出文件流的方法




    }

}

字符输入输出流:

package io;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;

/*
 * 字符流
 * 字节输出流 Write  对文件的操作使用子类的 FileWrite
 * 字节输入流 Reader 对文件的操作使用子类的 FileReader
 * 
 * 字符流的好处:
 * 程序会一个一个字符进行读取,而不会出现中文乱码的问题
 *  因为一个中文字为一个字符而一个英文字符也是一个字符
 * 
 */

public class CharStreamDome {

    public static void out(){

        File f=new File("C:\\Users\\龙布天下\\Desktop\\box.txt");//声明指定文件
        try {
            Writer  out = new FileWriter(f);
            out.write("我是好孩子");//注意:!!!这回就不用写入字节数组了,直接写入String类型的字符
            out.close();
            System.out.println("写入成功!!!");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
    public static void in(){

        File f=new File("C:\\Users\\龙布天下\\Desktop\\box.txt");
        try {
            Reader in=new FileReader(f);
            char[] c=new char[1];//声明要读入的字符
            StringBuffer sb=new StringBuffer();
            try {
                //把每次读到的1个字符都添加到sb引用的字符缓冲区中
                while(in.read(c)!=-1) {
                    sb.append(new String(c));
                }
                System.out.println(sb);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
    public static void main(String[] args) {

        out();
        in();
    }
}

内容小结:

总之:对非文本文件进行io操作时 使用字节流
文本文件进行io操作时 使用字符流是不会错的

通过源码分析字符流的内部实现还是字节流

字节字符转换流

package io;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.nio.charset.Charset;

/*
 * 转换流
 * OutputStreamWriter: 可以将字符流转换为字节流的输入形式
 * InputtreamReader  : 可以将字节流转换为字符流的输出形式
 * 
 */

public class ChangeStreamDome {

    //将字节流转换为字符流的方法
    public static void in(InputStream in) {

        Reader reader=new InputStreamReader(in);
        char[] c=new char[1024];
        try {
            while(reader.read(c)!=-1) {
                System.out.println(new String(c));
            }
            reader.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    //将字符流转换为字节流的方法
    public static void out(OutputStream out) {

        Writer writer=new OutputStreamWriter(out);
        try {
            writer.write("今天是个好日子!!!");
            writer.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    //开始测试的main方法
    public static void main(String[] args) {
        //将字符流转换为字节流的out方法传参
        File f2=new File("C:\\Users\\龙布天下\\Desktop\\box.txt");
        OutputStream out = null;
        try {
            out = new FileOutputStream(f2);
        } catch (FileNotFoundException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        out(out);

        //*******************************************************

        //将字节流转换为字符流的in方法进行传参
        File f=new File("C:\\Users\\龙布天下\\Desktop\\box.txt");
        InputStream in = null;
        try {
            in = new FileInputStream(f);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        in(in);
        /*
         * 内容小结:
         * 
         * 字节流:
         *  输出字节流 超类:OutputStream 子类:FileOutputStream//从程序里写出文件
         *  
         *  输入字节流 超类 InputStream   子类:FileInputStrrema//从文件里读出内容
         *  
         *  字符流流:
         *  输出字符流 超类:Writer       子类 FileWriter
         *  输入字符流 超类  Reader          子类 FileReader
         *  
         *  
         *  字节字符转换流
         *  输出字符流 超类:Writer       子类OutputStreamWriter// 将字符流转后为字节流的形式
         *  输入字符流 超类  Reader          子类InputStreamReader // 将字节流转换为字符流的形式
         *
         * 
         */
    }
}

字节缓冲输入输出流


package io;

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;
import java.io.InputStream;
import java.io.OutputStream;

/*
 *缓存的目的:
 *解决在写入问件时,频繁的操作文件所带来的性能降低的问题
 *BufferOutputStream 内部默认所缓存的大小是8KB,每次缓存到byte数组中的,当数据为满时,才会把数据写入到文件
 *
 */

public class BufferStreamDome {
    //字节输出缓冲流的方法
    public static void byteWriter() {
        File f=new File("C:\\Users\\龙布天下\\Desktop\\box.txt");
        try {
            OutputStream out=new FileOutputStream(f);
            //构造一个字节换成流
            BufferedOutputStream bos=new BufferedOutputStream(out);
            String info="小河流水哗啦啦!!!";
            byte[] b=info.getBytes();
            try {
                bos.write(b);
                System.out.println("写入成功!!!");
                //注意关闭流是有顺序的,要不然写不出去
                bos.close();
                out.close();

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    //字节输入缓冲流的方法
        public static void byteReader() {
            File f=new File("C:\\Users\\龙布天下\\Desktop\\box.txt");
            try {
                InputStream in=new FileInputStream(f);
                //构造一个字节换成流
                BufferedInputStream bis=new BufferedInputStream(in);

                try {
                    byte[] b=new byte[1024];
                    while(bis.read(b)!=-1) {
                        System.out.println(new String(b));
                    }

                    //注意关闭流是有顺序的,要不然读不出来
                    in.close();
                    bis.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
    public static void main(String[] args) {
        byteWriter();
        byteReader();
    }
}