欢迎访问宙启技术站
智能推送

JavaIO编程:10个经典函数示例指南

发布时间:2023-07-06 06:18:32

JavaIO是Java中用于处理输入和输出的类库,它可以用来读取和写入文件、处理网络中的数据流等。在编写Java程序时,经常会使用JavaIO进行文件的读写操作。

下面是10个JavaIO的经典函数示例:

1. FileInputStream和FileOutputStream:用于读取和写入字节流。可以使用它们来读取和写入二进制文件。

FileInputStream fis = new FileInputStream("input.txt");
int data;
while ((data = fis.read()) != -1) {
    System.out.print((char) data);
}
fis.close();

FileOutputStream fos = new FileOutputStream("output.txt");
String text = "Hello, world!";
byte[] bytes = text.getBytes();
fos.write(bytes);
fos.close();

2. FileReader和FileWriter:用于读取和写入字符流。可以使用它们来读取和写入文本文件。

FileReader fr = new FileReader("input.txt");
int data;
while ((data = fr.read()) != -1) {
    System.out.print((char) data);
}
fr.close();

FileWriter fw = new FileWriter("output.txt");
String text = "Hello, world!";
fw.write(text);
fw.close();

3. BufferedReader和BufferedWriter:用于缓冲读取和写入字符流。可以提高读写效率。

BufferedReader br = new BufferedReader(new FileReader("input.txt"));
String line;
while ((line = br.readLine()) != null) {
    System.out.println(line);
}
br.close();

BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"));
String text = "Hello, world!";
bw.write(text);
bw.newLine();
bw.close();

4. InputStreamReader和OutputStreamWriter:用于在字节流和字符流之间转换数据。

InputStreamReader isr = new InputStreamReader(new FileInputStream("input.txt"), "UTF-8");
int data;
while ((data = isr.read()) != -1) {
    System.out.print((char) data);
}
isr.close();

OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("output.txt"), "UTF-8");
String text = "Hello, world!";
osw.write(text);
osw.close();

5. DataInputStream和DataOutputStream:用于读写基本数据类型(如int、double等)。

DataInputStream dis = new DataInputStream(new FileInputStream("input.txt"));
int num = dis.readInt();
double price = dis.readDouble();
String name = dis.readUTF();
dis.close();

DataOutputStream dos = new DataOutputStream(new FileOutputStream("output.txt"));
dos.writeInt(10);
dos.writeDouble(9.99);
dos.writeUTF("JavaIO");
dos.close();

6. ObjectInputStream和ObjectOutputStream:用于读写Java对象。

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("input.txt"));
Person person = (Person) ois.readObject();
ois.close();

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("output.txt"));
Person person = new Person("Tom", 20);
oos.writeObject(person);
oos.close();

7. InputStreamReader和OutputStreamWriter:可用于读写已压缩的数据。

GZIPInputStream gzipIn = new GZIPInputStream(new FileInputStream("input.txt.gz"));
BufferedReader br = new BufferedReader(new InputStreamReader(gzipIn, "UTF-8"));
String line;
while ((line = br.readLine()) != null) {
    System.out.println(line);
}
br.close();

GZIPOutputStream gzipOut = new GZIPOutputStream(new FileOutputStream("output.txt.gz"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(gzipOut, "UTF-8"));
String text = "Hello, world!";
bw.write(text);
bw.close();

8. ByteArrayInputStream和ByteArrayOutputStream:用于读写字节数组。

byte[] data = "Hello, world!".getBytes();
ByteArrayInputStream bais = new ByteArrayInputStream(data);
int b;
while ((b = bais.read()) != -1) {
    System.out.print((char) b);
}
bais.close();

ByteArrayOutputStream baos = new ByteArrayOutputStream();
String text = "Hello, world!";
byte[] bytes = text.getBytes();
baos.write(bytes);
byte[] output = baos.toByteArray();
baos.close();

9. RandomAccessFile:可以随机访问文件的任何位置。

RandomAccessFile raf = new RandomAccessFile("input.txt", "r");
raf.seek(10);
byte[] buffer = new byte[8];
raf.read(buffer);
String text = new String(buffer);
System.out.println(text);
raf.close();

10. PipedInputStream和PipedOutputStream:用于在线程之间通过管道进行通信。

PipedInputStream in = new PipedInputStream();
PipedOutputStream out = new PipedOutputStream();
in.connect(out);

Thread readerThread = new Thread(() -> {
    try {
        int data;
        while ((data = in.read()) != -1) {
            System.out.print((char) data);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
});

Thread writerThread = new Thread(() -> {
    try {
        String text = "Hello, world!";
        byte[] bytes = text.getBytes();
        out.write(bytes);
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
});

readerThread.start();
writerThread.start();

总结:JavaIO提供了丰富的功能和灵活的接口,可以满足各种输入输出需求。掌握这些经典的JavaIO函数示例,对于处理文件、网络数据流等任务非常有帮助。但需要注意正确地处理异常和关闭流,避免资源泄漏。