Java语法-IO流

本文介绍了Java中的IO流概念,包括输入输出流的定义、FileOutputStream的使用方法、内存到硬盘的数据传输原理,以及如何进行文件的追加写入。同时,详细讲解了FileInputStream的读取操作,字节流与字符流的区别,并探讨了如何使用字节流实现文件复制。最后,讨论了FileWriter类在文件写入中的应用,包括如何续写文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、什么是IO流?

输入:硬盘的数据读取到内存中;
输出:内存的数据写入到硬盘中;
流:数据 —— 字符或字节;
输入输出的主人公是内存;

2、FileOutputStream如何使用?

通过构造方法构造对象;
调用对象中的write()写入数据, close()释放资源方法;

FileOutputStream(String str)构造方法代码演示:

import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStreamTest {
    public static void main(String[] args) throws IOException {
    
        FileOutputStream fos = new FileOutputStream("a.txt");
        
        fos.write(97);
        fos.close();
    }
}

FileOutputStream(File file)构造方法代码演示:

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStreamTest {
    public static void main(String[] args) throws IOException {
    
        File f = new File("a.txt");
        FileOutputStream fos = new FileOutputStream(f);
        
        fos.write(98);
        fos.close();
    }
}

3、内存写入数据到硬盘的原理是什么?

Java程序 → JVM → OS(操作系统) → OS调用写数据的方法 → 把数据写入到文件中

4、既然write()中写入的是字节,那么如何在硬盘文件中写入字符串?

将字符串变为字节数组;
字符串有getbytes()方法;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStreamTest {
    public static void main(String[] args) throws IOException {
        File f = new File("a.txt");
        FileOutputStream fos = new FileOutputStream(f);
        
        byte[] bytes = "你好".getBytes();
        fos.write(bytes);
        
        fos.close();
    }
}

5、fos.write() 的参数可以输入哪些参数?

字节;
字节数组;

6、如何实现文件中的追加写而不是覆盖写?

使用不同的FileOutputStream的构造方法;
new FileOutputStream(File file 或 String str, boolean append);
append = true 则是追加写;false 则是覆盖写;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStreamTest {
    public static void main(String[] args) throws IOException {
        File f = new File("a.txt");
        
        FileOutputStream fos = new FileOutputStream(f,true);
        
        byte[] bytes = ",蛋卷".getBytes();
        fos.write(bytes);
        fos.close();
    }
}

7、fos.write()如何换行?

将“\r\n”变为bytes数组;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStreamTest {
    public static void main(String[] args) throws IOException {
        File f = new File("a.txt");
        FileOutputStream fos = new FileOutputStream(f,true);

        fos.write("\r\n好久不见。".getBytes());
        
        fos.close();
    }
}

8、如何使用FileInputStream类读取数据?

重点:
while 循环以实现连续读取;
用一个变量接受读取的数据;
(char)len 使得字节变为字符;

import java.io.FileInputStream;
import java.io.IOException;

public class FileInputStreamTest {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("a.txt");
        
        int len = 0;
        while((len = fis.read()) != -1){
            System.out.println((char)len);
        }
    }
}

9、第8题在while循环里面一次读取一个字节,如何一次读取多个字节?

用字节数组;
重点:
fis.read()中传入字节数组;
fis.read(byte[] bytes)返回读取的字节长度;
String的新构造方法 String(byte[] bytes, index, len)

import java.io.FileInputStream;
import java.io.IOException;

public class FileInputStreamTest {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("a.txt");

        byte[] bytes = new byte[1024];
        int len = 0;
        while((len = fis.read(bytes)) != -1){
            System.out.println(new String(bytes,0,len));
        }
    }
}

10、fis.read()的返回值和fis.read(byte[] bytes)的返回值有何不同?

fis.read()的返回值返回的是读取的字节;
fis.read(byte[] bytes)的返回值返回的是读取的字节长度;

11、如何使用字节流实现文件复制?

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Test {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("a.txt");
        FileOutputStream fos = new FileOutputStream("b.txt");

        int len = 0;
        while ((len = fis.read()) != -1){
            fos.write(len);
        }
        fos.close();
        fis.close();
    }
}

12、字节流和字符流的命名区别是什么?

字节流的命名规则是以OutputStream,InputStream 结尾;
字符流的命名规则是以Reader, Writer 结尾;

13、如何使用字节流读取文件数据?

FileReader类;

import java.io.FileReader;
import java.io.IOException;

public class FileReaderTest {
    public static void main(String[] args) throws IOException {
        FileReader fr = new FileReader("a.txt");
        int len = 0;
        while ((len = fr.read())!= -1){
            System.out.print((char)len);
        }
        fr.close();
    }
}

使用字符数组的代码演示:

import java.io.FileReader;
import java.io.IOException;

public class FileReaderTest {
    public static void main(String[] args) throws IOException {
        FileReader fr = new FileReader("a.txt");
        char[] cs = new char[1024]; // 这里是字符流,所以数组得是字符数组
        int len = 0;
        while ((len = fr.read(cs))!= -1){
            System.out.print(new String(cs,0,len));
        }
        fr.close();
    }
}

14、fw.flush() 和 fw.close() 方法的相同点和区别?

flush 和 close() 都能把缓冲区的内容送到文件中;
区别是 flush后流对象可以继续使用,close后流对象无法继续使用;

15、fw.write() 里面的参数可以有哪些格式?

将光标放在write()中的空括号中,编译器会有提示;

16、fw.write() 如何续写?

构造方法,选择续写的构造方法:
FileWriter fw = new FileWriter(String name, boolean append);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值