每天写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());
        }
    }
}
相关推荐
harmful_sheep4 小时前
java group by常见用法
java·开发语言·python
SKH.4 小时前
Linux软件编程(6)线程间通信
java·开发语言·数据库
Rain的Java大神之路4 小时前
PC版网站被狂刷怎么处理
java·数据库·redis·后端·mysql·web安全·运维开发
宸津-代码粉碎机4 小时前
AI工程化高阶实战|从Demo到生产落地核心架构、全套源码与避坑指南
java·大数据·开发语言·人工智能·python·架构
泡海椒5 小时前
告别手写 HTTP 模板!JQuick-Curl:直接把 curl 命令跑在 Java 中
java·网络协议·http
珍珠先生5 小时前
第2章 集合框架深度:HashMap 原理与并发集合
java
FreeTinker6 小时前
Java文件服务器的技术选型与实现路径:从嵌入式工具到企业级系统
java·服务器·开发语言
ly76896 小时前
Java 21 到 Java 26 新特性详解:虚拟线程、模式匹配、结构化并发、HTTP/3 与 AOT
java·jvm
我星期八休息6 小时前
Linux I/O多路转接—epoll
java·linux·运维·服务器·开发语言·jvm·算法
学长毕业设计7 小时前
基于springboot的云南中草药知识普及管理网站的设计与开发(源码+文档+讲解视频)
java·spring boot·后端