• Java 流(Stream)、文件(File)和IO详解


    Java中,流(Stream)、文件(File)和输入输出(IO)操作是非常重要的内容。这些功能用于处理数据的读取、写入以及流式处理。本文将详细介绍Java中流、文件和IO的使用方法,包括代码示例和应用场景。

    一、Java流(Stream)

    Java 8引入了Stream API,用于处理集合数据。Stream是一种可以执行一系列操作(如过滤、映射、减少等)以处理数据的抽象。

    1.1 创建Stream

    可以从集合、数组、生成器等创建Stream。

    示例:

    import java.util.Arrays;
    import java.util.List;
    import java.util.stream.Stream;
    
    public class StreamExample {
        public static void main(String[] args) {
            // 从集合创建Stream
            List<String> list = Arrays.asList("a", "b", "c");
            Stream<String> stream1 = list.stream();
    
            // 从数组创建Stream
            String[] array = {"x", "y", "z"};
            Stream<String> stream2 = Arrays.stream(array);
    
            // 使用Stream.of创建Stream
            Stream<String> stream3 = Stream.of("1", "2", "3");
        }
    }
    

    1.2 常见操作

    Stream支持多种操作,如过滤(filter)、映射(map)、归约(reduce)等。

    示例:

    import java.util.Arrays;
    import java.util.List;
    import java.util.stream.Collectors;
    
    public class StreamOperationsExample {
        public static void main(String[] args) {
            List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
    
            // 过滤偶数
            List<Integer> evenNumbers = numbers.stream()
                    .filter(n -> n % 2 == 0)
                    .collect(Collectors.toList());
            System.out.println("Even numbers: " + evenNumbers);
    
            // 将数字平方
            List<Integer> squaredNumbers = numbers.stream()
                    .map(n -> n * n)
                    .collect(Collectors.toList());
            System.out.println("Squared numbers: " + squaredNumbers);
    
            // 计算总和
            int sum = numbers.stream()
                    .reduce(0, Integer::sum);
            System.out.println("Sum: " + sum);
        }
    }
    

    二、Java文件操作(File)

    Java的java.io.File类用于表示文件和目录路径名。可以使用File类创建、删除、检查文件和目录的属性等。

    2.1 创建文件和目录

    示例:

    import java.io.File;
    import java.io.IOException;
    
    public class FileExample {
        public static void main(String[] args) {
            try {
                // 创建文件
                File file = new File("example.txt");
                if (file.createNewFile()) {
                    System.out.println("File created: " + file.getName());
                } else {
                    System.out.println("File already exists.");
                }
    
                // 创建目录
                File directory = new File("exampleDir");
                if (directory.mkdir()) {
                    System.out.println("Directory created: " + directory.getName());
                } else {
                    System.out.println("Directory already exists.");
                }
            } catch (IOException e) {
                System.out.println("An error occurred.");
                e.printStackTrace();
            }
        }
    }
    

    2.2 读取和写入文件

    可以使用FileReaderFileWriter类来读取和写入文件。

    示例:

    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class FileReadWriteExample {
        public static void main(String[] args) {
            try {
                // 写入文件
                FileWriter writer = new FileWriter("example.txt");
                writer.write("Hello, World!");
                writer.close();
    
                // 读取文件
                FileReader reader = new FileReader("example.txt");
                int character;
                while ((character = reader.read()) != -1) {
                    System.out.print((char) character);
                }
                reader.close();
            } catch (IOException e) {
                System.out.println("An error occurred.");
                e.printStackTrace();
            }
        }
    }
    

    三、Java IO(输入输出)

    Java IO库提供了多种输入输出流类,用于处理字节和字符数据。主要分为字节流和字符流两类。

    3.1 字节流

    字节流用于处理8位字节数据,主要的类是InputStreamOutputStream及其子类。

    3.1.1 FileInputStream和FileOutputStream

    示例:

    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class ByteStreamExample {
        public static void main(String[] args) {
            try {
                // 写入字节文件
                FileOutputStream fos = new FileOutputStream("byteFile.txt");
                String data = "Hello, Byte Stream!";
                fos.write(data.getBytes());
                fos.close();
    
                // 读取字节文件
                FileInputStream fis = new FileInputStream("byteFile.txt");
                int byteData;
                while ((byteData = fis.read()) != -1) {
                    System.out.print((char) byteData);
                }
                fis.close();
            } catch (IOException e) {
                System.out.println("An error occurred.");
                e.printStackTrace();
            }
        }
    }
    

    3.2 字符流

    字符流用于处理16位字符数据,主要的类是ReaderWriter及其子类。

    3.2.1 FileReader和FileWriter

    示例:

    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class CharStreamExample {
        public static void main(String[] args) {
            try {
                // 写入字符文件
                FileWriter writer = new FileWriter("charFile.txt");
                writer.write("Hello, Character Stream!");
                writer.close();
    
                // 读取字符文件
                FileReader reader = new FileReader("charFile.txt");
                int charData;
                while ((charData = reader.read()) != -1) {
                    System.out.print((char) charData);
                }
                reader.close();
            } catch (IOException e) {
                System.out.println("An error occurred.");
                e.printStackTrace();
            }
        }
    }
    

    四、综合应用示例

    在实际应用中,可能会综合使用文件操作和流来处理复杂的数据。下面是一个示例,展示如何读取一个文件的内容并通过流进行处理。

    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.Arrays;
    import java.util.List;
    import java.util.stream.Collectors;
    
    public class FileStreamExample {
        public static void main(String[] args) {
            try (BufferedReader br = new BufferedReader(new FileReader("data.txt"))) {
                List<String> lines = br.lines().collect(Collectors.toList());
                List<String> filteredLines = lines.stream()
                        .filter(line -> line.contains("keyword"))
                        .collect(Collectors.toList());
    
                filteredLines.forEach(System.out::println);
            } catch (IOException e) {
                System.out.println("An error occurred.");
                e.printStackTrace();
            }
        }
    }
    

    五、总结

    本文详细介绍了Java中的流(Stream)、文件(File)和IO操作,涵盖了基本概念、常用操作和示例代码。掌握这些知识对于处理数据、文件读写以及流式数据处理非常重要。希望这篇文章对你理解和应用Java的流、文件和IO有所帮助。如果你有任何问题或建议,欢迎在评论区讨论。

  • 相关阅读:
    国产FPGA核心板!米尔紫光同创Logos-2和Xilinx Artix-7核心板
    英飞凌 Tricore 架构中断系统详解
    互联网Java工程师面试题·Java 面试篇·第一弹
    Rabbit加密算法:性能与安全的完美结合
    python中常见关键字英文含义整理
    基于java的运动健康微信小程序
    【UCB操作系统CS162项目】Lab0:项目上手 (Getting Real)
    OpenShift 4 - 安装 ODF 并部署红帽 Quay (3 Worker)
    数据结构 | (三) Stack
    java+python+vue乡村医生学习培训医疗服务系统
  • 原文地址:https://blog.csdn.net/2401_85606134/article/details/139845380