Java I/O

File类

1.操作文件和目录

在程序中,一个Flie对象可以代表一个文件或者目录。
它可以查出文件相关的信息,如名称,修改日期,文件大小。
Flie类的构造方法定义如下:

public File(String pathName)

创建File对象的语句如下:

File file=new File("C:\\LICENSE.txt");

常用方法:

boolean createNewFile()\创建新文件
boolean delete()\删除文件
boolean existe()\判断文件是否存在
Boolean isFile()\判断是否是文件
boolean isDirectory()\判断是否是目录
long length()\返回文件长度,单位为字节:如果文件不存在,则返回0L
String getPath()\返回文件名对应的路径
String getAbsolutePath()\返回此对象表示的文件的绝对路径

代码示例:

 File file=new File("LICENSE.txt");
 	if (file.exists()){
            if (file.isFile()){
                System.out.println("文件名:"+file.getName()+",文件长度:"+file.length()+"字节");
                System.out.println("文件路径:"+ file.getPath());
                System.out.println("文件的绝对路径:"+file.getAbsolutePath());
            }
            if (file.isDirectory()){
                System.out.println("此文件是目录");
            }
        }else {
            System.out.println("此文件不存在");
        }



        if (file.exists()){
            file.delete();
            System.out.println("文件删除成功");
        }
        if(file.exists()){
            file.exists();
        }else {
            try {
                file.createNewFile();
                System.out.println("创建成功");
            }catch (IOException ex){
                ex.printStackTrace();
            }
        }

I/O流

流:指一连串流动的字符,是以先进先出的方式发送和接收数据的通道,Java把所有流类型封装到Java.io包中,以不同的角度可以对流进行分类

1.按流向划分:输入流和输出流

输入流:只能从中读取数据,不能写入数据的流,实现程序从数据源中读数据

代码示例:

 try {
            InputStream fis=new FileInputStream("E:\\a.txt");
            try {
                System.out.println(""+fis.available());
                int data=fis.read();
                while (data !=-1){
                    System.out.println((char)data );

                    data=fis.read();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

输出流:只能向其写入数据,不能从中读取数据,实现程序向目标数据源中写数据

代码示例:

try {
            OutputStream fos = new FileOutputStream("E:\\a.txt");
            String str = "我是小明";
            byte[] words = str.getBytes();
            try {
                fos.write(words, 0, words.length);
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

2.按处理单元划分:字节流和字符流

字节流:以8位字节为操作数据单元的流,可用于操作二进制数据

字节输出流基类:OutputStream
OutputStream是抽象类,必须使用该类的子类进行实例化对象,如果需要操作文件,则需要FileOutputStream实例化

OutputStream类常用方法:

viod close() 关闭输出流
viod flussh() 刷新缓冲器
viod write(byte[] b)将每个byte数组写入数据流
viod write(byte[] b,int off,int len)将每个指定范围的byte数组写入数据流
viod write(int b)将一个字节数据写入数据流

代码示例:

 FileInputStream fis=new FileInputStream("e:\\a.txt");
 		//输入流
        byte [] bytes =new byte[3];
        while (fis.read(bytes)!=-1){
            System.out.println(new String(bytes));
        }
        //输出流
        Writer fw=new FileWriter("e:\\a.txt");
        fw.write("文化部是鼠标");
        System.out.println(1);
        fw.flush();
        fw.close();

FileOutputStream类常用的构造方法:

FileOutputStream(File file)
用于创建指定File对象写数据的文件输出流 file:指定目标文件的对象

代码示例:

 File file = new File("E:\\test.txt");
        try (FileOutputStream fos = new FileOutputStream(file)) {
            String data = "Hello, world!";
            fos.write(data.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        };

FileOutputStream(String name)
用于创建指定路径的文件写数据的文件输出流。name:指定目标文件的路径字符串

代码示例:

 String fileName = "E:\\test.txt";
        try (FileOutputStream fos = new FileOutputStream(fileName)) {
            String data = "Hello, world!";
            fos.write(data.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }

FileOutputStream(String name ,boolean, append)
用于创建指定路径的文件写数据的文件输出流。name:指定目标文件的路径字符串,
append:表示是否在文件末尾追加数据,若为ture则是表示可以在文件末尾追加数据

代码示例:

String fileName = "E:\\test.txt";
        try (FileOutputStream fos = new FileOutputStream(fileName)) {
            String data = "Hello, world!";
            fos.write(data.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }

字节输入流基类:InputStream类
InputStream也是抽象类通常使用FileInputStream子类实现文本文件内容的读取

InputStream类的常用方法:

int read() 读取一个字节数据
int read(byte[] b)将数据读取字节数组中
int read(byte[] b,int off,int len)从输入流中读取最多len长度的字节,将它保存到字节数组中,保存的位置从off开始
void close()关闭输入流
int available()返回输入流读取的字节数

代码示例:

 Reader fr=new FileReader("e:\\a.txt");
        char[] c=new char[1024];
        int len=fr.read(c);
        while (len>0){
            System.out.println(new String(c,0,len));
            len=fr.read(c);
        }
		fr.close();

FileInputStream类常用构造方法:

FileInputStream(File file)
用于创建指定File对象写数据的文件输入流 file:指定目标数据源对象

        File file = new File("E:\\test.txt");
        try (FileInputStream fis = new FileInputStream(file)) {
            int data;
            while ((data = fis.read()) != -1) {
                System.out.print((char) data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

FileInputStream(String name)
用于创建指定File对象写数据的文件输入流 file:指定目标数据源对象
name:指定目标文件数据源字符串

        String fileName = "E:\\test.txt";
        try (FileInputStream fis = new FileInputStream(fileName)) {
            int data;
            while ((data = fis.read()) != -1) {
                System.out.print((char) data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

字符流:以16位的字符为操作数据定义的流,可用于操作文本数据

Writer类是字符输出流的抽象基类

常用方法:

viod write(String str) 将str字符串中包含的字符输出流中
viod write(String str,int off,int len)将字符串从off位置开始,长度为len的字符输出到输出流中
viod close()关闭输出流
viod flush()刷新输出流

代码示例:

        String fileName = "E:\\test.txt";
        try (FileOutputStream fos = new FileOutputStream(fileName)) {
            String data = "Hello, world!";

            // 将字符串中包含的字符写入输出流中
            fos.write(data.getBytes());

            // 将字符串从off位置开始,长度为len的字符输出到输出流中
            int off = 7;
            int len = 5;
            fos.write(data.getBytes(), off, len);

            // 关闭输出流,释放所有与之关联的系统资源
            fos.close();

            // 刷新输出流,确保所有数据都已经被刷新到目标设备中
            fos.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }

字符输出流FileWriter类
FileWriter类是Writer常用的子类,使用该类可以以字符为数据处理单元向文本文件中写数据

字符输入流基类:Reaader

常用方法:

int read() 从输入流中读取单个字符,返回所读取的字符类型
int read(char[] c)从输入流中最多读取len个字符的数据并存储在字符数组c中,返回实际读取的字符数
int read(char[] c,int off, int len)从输入流中最多读取len个字符的数据并存储在字符数组c中,存入数组c时,并不是从数组起点开始的,而是从off位置开始,返回实际读取的字符数

代码示例:

		Reader fr=new FileReader("e:\\a.txt");
        char[] c=new char[1024];
        int len=fr.read(c);
        while (len>0){
            System.out.println(new String(c,0,len));
            len=fr.read(c);
        }

字符输入流FileReader类
Reaader类它是抽象类,可以使用其子类FileReader创建对象

Reader fr=new FileReader(“e:\a.txt”);

3.按流的角色划分:节点流和处理流

节点流:可以直接向一个特定的存储介质(如磁盘,文件)读写数据的流、

处理流:用于对一个已存在的流进行连接和封装,是通过封装后的流实现数据读写操作的流

字符缓冲流

BufferedWriter类是Writer类的子类,BufferedWriter类可以把一批数据写到缓冲区,只有在缓冲区满的时候,才会把缓冲区的数据真正的目的地,

BufferedWriter类常用构造方法

BufferedWriter(Writer out) 创建一个缓冲字符输出流

代码示例:

Writer fw=new FileWriter("e:\\a.txt");
``BufferedWriter bf=new BufferedWriter(fw);

BufferedReader类是Reader类的子类,它与FileReader类的区别在于BufferedReader类有缓冲流,它可以先把一批数据读到缓冲区,接下来的读操作都是从缓冲区内获取数据

BufferedReader常用构造方法

BufferedReader(Reader in) 创建一个缓冲字符输入流

代码示例:

Reader fr=new FileReader("e:\\a.txt");
BufferedReader br=new BufferedReader(fr);

数据操作流

DataOutputStream和DataInputStream类

DataOutputStream类是OutputStream类的子类,DataOutputStream类写二进制文件的实现步骤与使用FileOutputStream类写文件的步骤极其相似,而且用到FileOutputStream类,同样,DataInputStream类是InputStream类的子类,在使用和FileInputStream类相似

代码示例:

		FileInputStream fis=new FileInputStream("D:\\whb.txt");
        DataInputStream dis=new DataInputStream(fis);
        FileOutputStream ois=new FileOutputStream("C:\\abc.txt");
        DataOutputStream fos=new DataOutputStream(ois);

序列化和反序列化

对象输入流ObjectOutputStream

对象的序列化,是把一个对象变为二进制的数据流的一种方法,通过对象序列化可以方便地实现对象的传输和存储,如果一个类的对象需要被序列化,则这个对象所属类必须实现java.io.Seriaalizable接口

public interface Seriaalizable{}

常用方法

ObjectOutputStream(OutputStream out) 创建对象输出流:属于构造方法
final void writeObject(Object obj)将指定对象写入流:属于实例方法

对象输出流ObjectInputStream

执行反序列化操作需使用对象输出流ObjecInputStream,它可以直接把序列化后的对象还原

常用方法:

ObjectInputStream(InputStream in)创建对象输入流对象:构造方法
final Object readObject() 从指定位置读取对象:实例方法

代码示例:

String fileName = "E:\\person.ser";
        try (FileOutputStream fos = new FileOutputStream(fileName);
             ObjectOutputStream oos = new ObjectOutputStream(fos)) {

            // 创建一个Person对象
            Person person = new Person("Alice", 30);

            // 将Person对象写入输出流中
            oos.writeObject(person);

            System.out.println("Person object has been written to the file.");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值