S3rein头像
关注

Java IO相关

普通输入输出

import java.util.Scanner;

public class IODemo {
    // 小规模输入输出 对整体耗时影响不大
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        while (sc.hasNextInt()) {
            int a = sc.nextInt(); // 接收一个Int 空格符作为分隔符
            int b = sc.nextInt();
            System.out.println(a + " + " + b + " = " + (a + b));
        }
        /*
        10 20
        20 30
        40 50
        10 + 20 = 30
        20 + 30 = 50
        40 + 50 = 90
         */
    }
}

快速输入输出

输入采用BufferedReader读取整行,再用StringTokenizer按指定分隔符切割得到各个数据项;

替代思路:readLine读取整行后,使用String.split()进行分割;

输出采用PrintWriter缓冲输出,最后手动flush;

替代思路:使用StringBuilder拼接再一次性输出。

import java.io.*;
import java.util.StringTokenizer;

public class FastIO {
    // 应对大规模输入输出,避免超时
    public static void main(String[] args) throws IOException {
        // 输入缓冲
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        // 输出缓冲
        PrintWriter pw = new PrintWriter(new BufferedOutputStream(System.out));
        // 第一行是输入的行数
        int lineNumber = Integer.parseInt(reader.readLine());
        while (lineNumber-- != 0) { // 按行读取
            // 按指定分隔符切割
            StringTokenizer tokenizer = new StringTokenizer(reader.readLine(), " ");
            int sum = 0;
            while (tokenizer.hasMoreTokens()) {
                // 获取单个数据项
                sum += Integer.parseInt(tokenizer.nextToken());
            }
            // 添加到输出缓冲区
            pw.println(sum);
        }
        // 刷新
        pw.flush();
        /*
        3
        10 20 30
        20 30 40
        30 40 50
        60
        90
        120
         */

    }
}

文件读写

文本类型

import java.io.*;
import java.util.StringJoiner;
import java.util.StringTokenizer;

public class FileIO {
    // 适合文本文件
    public static void main(String[] args) {
        // ./ 表示整个项目的根目录
        // 输入BufferedReader + FileReader
        // 输出BufferedWriter + FileWrite
        try (BufferedReader br = new BufferedReader(new FileReader("./data.txt"));
             BufferedWriter bw = new BufferedWriter(new FileWriter("./output.txt"))
        ) {
            String line;
            while ((line = br.readLine()) != null) {
                StringTokenizer st = new StringTokenizer(line);
                int sum = 0;
                StringJoiner sj = new StringJoiner(" + ");
                while (st.hasMoreTokens()) {
                    String num = st.nextToken();
                    sj.add(num);
                    sum += Integer.parseInt(num);
                }
                bw.write(sj.toString() + " = " + sum);
                bw.newLine();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

字节流

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

public class FileIO2 {
    // 适合二进制文件
    public static void main(String[] args) {
        try (FileInputStream inputStream = new FileInputStream("./1.jpg");
             FileOutputStream outputStream = new FileOutputStream("./2.jpg")) {
            // 缓存区
            byte[] buffer = new byte[1024];
            int bytesReader;
            int bytesNumber = 0;
            // 直到读完为止
            while ((bytesReader = inputStream.read(buffer)) != -1) {
                // 写入
                outputStream.write(buffer, 0, bytesReader);
                bytesNumber += bytesReader;
            }
            System.out.println("there are " + bytesNumber + " bytes");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/qwerzbc66/article/details/163951425

文章来源转载

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--