每天写java到期末考试(6.6)-java文件输入输出流实验

1、用字节流读写二进制文件

要求:用DataOutputStream+FileOutputStream类将1,2,...,100,这100个数字写入到文件

d:\out1.bin里,然后再用DatalnputStream+FilelnputStream类将d:\out1.bin的内读出来,并输出到屏幕上。

用DataOutputStream+FileOutputStream写入二进制数据时,直接调用DataOutputStream的writelnt()方

法将一个int型数据写入到文件中。读入数据时用DatalnputStream+FilelnputStream,调用DatalnputStream的

readlnt()方法读入一个int型数据。

判断是否读入完毕有3种办法:

a:用while循环,当抛出EOFException时表示数据读入完毕。

b:先调用File类的length()方法得到输入流的字节总数,字节总数除以4得到需要读入的次数,然后用for循

环来读入。

c:在写入d:\out1.bin时,先写入一个整数,表示一共写入了多少个数,例如先写入100,读入时先读第一

个数字,即100,然后循环100次读取其余的数字。

复制代码
import java.io.*;

public class BinaryFileReadWrite {
    public static void main(String[] args) {
        // 写入数据到文件
        try {DataOutputStream dos = new DataOutputStream(new FileOutputStream("d:\\out1.bin"));
            for (int i = 1; i <= 100; i++) {
                dos.writeInt(i);
            }
            dos.close();
            System.out.println("写入数据成功");
        } catch (IOException e) {
            System.out.println("写入数据失败:" + e.getMessage());
        }

        // 从文件读取数据并输出到屏幕
        try {
            DataInputStream dis = new DataInputStream(new FileInputStream("d:\\out1.bin"));
            int num;
            while (true) {
                try {
                    num = dis.readInt();
                    System.out.print(num + " ");
                } catch (EOFException e) {
                    break;
                }
            }
            dis.close();
        } catch (IOException e) {
            System.out.println("读取数据失败:" + e.getMessage());
        }
    }
}
2、用字符流读写字符文件

要求:用FileWriter类将1,2,...,100,这100个数字写入到文件d:\out2.txt里,然后再用FileReader类将

d:\out2.txt的内读出来,并输出到屏幕上。

注意:将一个数字以字符流的方式写入文件时,要将该数字先转化为字符,然后写入到文件中。从文件中读

入字符数据时,可以一次读入一个字符,也可以一次读多个字符,放到字符数组中。

复制代码
import java.io.*;

public class CharacterFileReadWrite {
    public static void main(String[] args) {
        // 写入数据到文件
        try (FileWriter fw = new FileWriter("d:\\out2.txt")) {
            for (int i = 1; i <= 100; i++) {
                fw.write(Integer.toString(i));
                fw.write("\n"); // 换行
            }
            System.out.println("写入数据成功");
        } catch (IOException e) {
            System.out.println("写入数据失败:" + e.getMessage());
        }

        // 从文件读取数据并输出到屏幕
        try (FileReader fr = new FileReader("d:\\out2.txt")) {
            int data;
            while ((data = fr.read()) != -1) {
                System.out.print((char) data);
            }
        } catch (IOException e) {
            System.out.println("读取数据失败:" + e.getMessage());
        }
    }
}
3、用字节流读写字符文件

用FileOutputStream将1,2,...,100,这100个数字的每个数字按照字节数组方式写入到文件d:\out3.txt

里,然后再用FilelnputStream类按照一次读入一个字节数组的方式将d:\out3.txt的内的数据读出来,并输出到

屏幕上。

注意:将一个数字以字节数组的方式写入文件时,要将该数字先用String.valueOf()方法转化为字符,然后

用String的getBytes()方法变成一个字节数组,然后用FileOutputStream类将字节数组写入到文件中。从文件中

读入字符数据时,可以用FilelnputStream一次读入一个字节数组,然后把字节数组变成字符串。

复制代码
import java.io.*;

public class ByteFileReadWrite {
    public static void main(String[] args) {
        // 写入数据到文件
        try (FileOutputStream fos = new FileOutputStream("d:\\out3.txt")) {
            for (int i = 1; i <= 100; i++) {
                String numberAsString = String.valueOf(i);
                byte[] bytes = numberAsString.getBytes();
                fos.write(bytes);
                fos.write("\n".getBytes()); // 换行
            }
            System.out.println("写入数据成功");
        } catch (IOException e) {
            System.out.println("写入数据失败:" + e.getMessage());
        }

        // 从文件读取数据并输出到屏幕
        try (FileInputStream fis = new FileInputStream("d:\\out3.txt")) {
            byte[] buffer = new byte[1024]; // 缓冲区大小
            int bytesRead;
            while ((bytesRead = fis.read(buffer)) != -1) {
                String data = new String(buffer, 0, bytesRead);
                System.out.print(data);
            }
        } catch (IOException e) {
            System.out.println("读取数据失败:" + e.getMessage());
        }
    }
}
相关推荐
sniper_fandc2 分钟前
JVM(Java虚拟机)详解
java·开发语言·jvm
小鸡脚来咯2 分钟前
SpringBoot 常用注解通俗解释
java·spring boot·后端
AI的魔盒7 分钟前
基于Java与MAVLink协议的多无人机(Cube飞控)集群控制与调度方案问题
java·开发语言·无人机
北执南念44 分钟前
项目代码生成工具
java
中国lanwp1 小时前
springboot logback 默认加载配置文件顺序
java·spring boot·logback
苹果酱05671 小时前
【Azure Redis 缓存】在Azure Redis中,如何限制只允许Azure App Service访问?
java·vue.js·spring boot·mysql·课程设计
Java致死2 小时前
单例设计模式
java·单例模式·设计模式
胡子发芽2 小时前
请详细解释Java中的线程池(ThreadPoolExecutor)的工作原理,并说明如何自定义线程池的拒绝策略
java
沫夕残雪2 小时前
Tomcat的安装与配置
java·tomcat
胡子发芽2 小时前
请解释Java中的NIO(New I/O)与传统I/O的区别,并说明NIO中的关键组件及其作用
java