写点什么

Java——流输入输出

作者:武师叔
  • 2022 年 6 月 22 日
  • 本文字数:2828 字

    阅读完需:约 9 分钟

Java——流输入输出

流输入输出

java.io 文件夹内提供了 Java 程序中 I/O 操作使用的类,使用时需要进行导入。

字节流

InputStream/OutputStream 类

以字节为单位进行读取的数据流。常用来处理二进制数据的输入输出,如键盘输入、网络通信。但字节流不能正确显示 Unicode 字符。


输入流


InputStream in = new InputStream(socket.getIntputStream());        // 创建输入对象
int len = in.available(); // 读取输入对象长度
char c = (char)in.read(); // 读取输入字节
byte[] b = new byte[len]; // 连续读取输入字节in.read(b);
in.close(); // 关闭输入对象Copy to clipboardErrorCopied
复制代码


输出流


OutputStream out = new OutputStream(socket.getOutputStream());     // 创建输出对象
byte[] b = {1,2,3}; // 导入输出字节 out.write(b);
out.flush(); // 刷新输出对象,输出字节
out.close(); // 关闭输出对象,输出字节Copy to clipboardErrorCopied
复制代码

字符流

Reader/Writer 类

以字符为单位进行读取的数据流。只能用于处理文本数据。且所有文本数据,即经过 Unicode 编码的数据都必须以字符流的形式呈现。


我们在 Java 程序中处理数据往往需要用到字符流,但在通信中却需要使用字节流。这就需要进行数据格式转化。

InputStreamReader 类

Reader 类子类。将字节流数据转换成字符流,常用于读取控制台输入或读取网络通信。可指定编码方式,否则使用 IDE 默认编码方式。


// 读取键盘输入InputStreamReader in = new InputStreamReader(System.in);// 读取套接字通信,并指定编码格式InputStreamReader in = new InputStreamReader(socket.getInputStream(), "UTF-8");Copy to clipboardErrorCopied
复制代码

OutputStreamWriter 类

Writer 类子类。将字符流数据转换成字节流,常用于发送网络通信。


// 数据转化为字节流发送OutputStreamWriter out = new OutputStreamWriter(socket.getOutputStream());Copy to clipboardErrorCopied
复制代码

文件流

File 类

用于文件或者目录的描述信息,默认加载当前目录。


File f1 = new File("FileTest.txt");                // 读取当前目录文件File f2 = new File("D://file//FileTest.txt");      // 读取指定目录文件Copy to clipboardErrorCopied
复制代码

FileInputStream/FileReader 类

FileInputStream 类读取字节流文件信息,FileReader 类读取字符流文件信息。


public class TestFileReader {    public static void ReadFile(String textName) {        int c = 0;        try {            // 连接文件            FileReader fr = new FileReader("D:\Workspaces" + textName);            // 执行操作            while ((c = fr.read()) != -1) {                System.out.print((char)c);            }            fr.close();        } catch (FileNotFoundException e) {            System.out.println("找不到指定文件");        } catch (IOException e) {            System.out.println("文件读取错误");        }    }}Copy to clipboardErrorCopied
复制代码

FileOutputStream/FileWriter 类

FileOutputStream 写入字节流文件信息,FileWriter 类写入字符流文件信息。


public class TestFileWriter {    public static void ReadFile(String textName) {        int c = 0;        try {            // 追加模式,写入文本信息会添加到文本尾部            FileWriter fw = new FileWriter(textName);                        // 覆盖模式,写入文本信息会覆盖原有数据            FileWriter fw2 = new FileWriter("data.txt", false);            // 执行操作            fw.write("Hello world!欢迎来到 java 世界\n");                             fw.append("我是下一行");                                        fw.flush();                                                   System.out.println("文件编码为" + fw.getEncoding());            fw.close();                            } catch (FileNotFoundException e) {            System.out.println("找不到指定文件");        } catch (IOException e) {            System.out.println("文件写入错误");        }    }}Copy to clipboardErrorCopied
复制代码

缓冲流

BufferedInputStream/BufferedReader 类

BufferedInputStream 类将输入字节数据暂存到缓冲区数组,BufferedReader 类将输入字符流数据暂存到缓冲区数组。


JVM 在缓冲区数组满后一次性获取缓冲区内的数据,减少了对 CPU 的频繁请求。

BufferedOutputStream/BufferedWriter 类

BufferedOutputStream 类将输出字节数据暂存到缓冲区数组,BufferedWriter 类将输出字符流数据暂存到缓冲区数组。


JVM 在刷新时一次性将缓冲区内的数据输出到外部设备,减少了对 CPU 的频繁请求。


class TestBuffer{    public static void bufferUse() throws IOException {        // 通过缓冲区读取键盘输入        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));        // 通过缓冲区输出到文件        BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"));        // 执行操作        String line = null;        while((line = br.readLine()) != null){     // readLine 缓冲流特有方法,一次性读取一行            if("over".equals(line)){                break;            }            bw.write(line);            bw.newLine();                          // newLine 缓冲流特有方法,写入换行符            bw.flush();        }        bw.close();        br.close();    }}Copy to clipboardErrorCopied
复制代码



扫描器

Scanner 类

包装输入并自动分割数据,调用 next 方法捕获,可以自动转换数据类型。位于 java.util 包内,使用时需进行导入。


Scanner sc = new Scanner(System.in);                             // 读取键盘输入,返回 String 数据类型                  Scanner sc = new Scanner(new FileInputStream("example.txt"));     // 读取文件信息,返回 String 数据类型
sc.hasNextInt();
int n = sc.nextInt(); // 截取数据并自动转化数据类型String str = sc.nextLine(); // 取出行内全部数据
sc.close(); // 关闭 Scanner 类
复制代码


发布于: 刚刚阅读数: 3
用户头像

武师叔

关注

每天丰富自己,去过自己想要的生活! 2022.04.28 加入

一个喜欢最新技术,研发的人工智能专业的大二学生,用自己的代码做一些有意义的事情! 目前大二结束有去大厂研发岗实习的计划,每天丰富自己的技术,去过自己想要的实习生活。

评论

发布
暂无评论
Java——流输入输出_6月月更_武师叔_InfoQ写作社区