Java学习day13

流(Stream)

流是一个非常强大的概念,它提供了一种高效且便捷的方式来处理集合数据。你可以将流看作是一系列数据项的管道,你可以对这些数据进行各种操作,如过滤、映射、排序和归约。

流的创建

在Java中,你可以通过集合、数组或输入/输出操作来创建流。下面是一些创建流的示例:

  • 通过集合创建流:
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
Stream<String> stream = names.stream();
  • 通过数组创建流:
String[] names = {"Alice", "Bob", "Charlie"};
Stream<String> stream = Arrays.stream(names);
  • 通过输入/输出操作创建流:
try (Stream<String> stream = Files.lines(Paths.get("data.txt"))) {
    // 处理流中的数据
} catch (IOException e) {
    e.printStackTrace();
}

流的操作

流提供了丰富的操作方法,你可以使用它们来处理流中的数据。下面是一些常见的流操作:

  • 过滤操作:使用filter方法根据指定的条件过滤流中的元素。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<Integer> evenNumbers = numbers.stream()
                                   .filter(n -> n % 2 == 0)
                                   .collect(Collectors.toList());
  • 映射操作:使用map方法将流中的元素映射为另一个元素。
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
List<Integer> nameLengths = names.stream()
                                 .map(String::length)
                                 .collect(Collectors.toList());
  • 排序操作:使用sorted方法对流中的元素进行排序。
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
List<String> sortedNames = names.stream()
                               .sorted()
                               .collect(Collectors.toList());
  • 归约操作:使用reduce方法将流中的元素归约为一个值。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream()
                 .reduce(0, (a, b) -> a + b);

流的分类

  1. 根据功能分类:

    • 节点流(Node Stream):

      • 描述:节点流直接与数据源或目标进行交互,提供最基本的读取和写入功能。
      • 包含的流类型:
        • 字节节点流(Byte Node Stream):用于处理字节数据的节点流。
          • 示例:InputStreamOutputStreamFileInputStreamFileOutputStream等。
        • 字符节点流(Character Node Stream):用于处理字符数据的节点流。
          • 示例:ReaderWriterFileReaderFileWriter等。
    • 缓冲流(Buffered Stream):

      • 描述:缓冲流是对节点流的包装,提供了缓冲功能,以提高I/O操作的效率。

      • 包含的流类型:

        • 缓冲字节流(Buffered Byte Stream):对字节节点流进行缓冲的流。

          • 示例:BufferedInputStreamBufferedOutputStream等。
        • 缓冲字符流(Buffered Character Stream):对字符节点流进行缓冲的流。

          • 示例:BufferedReaderBufferedWriter等。
    • 区别:节点流直接与数据源或目标进行交互,数据在读取或写入时不会进行缓冲,每次操作都涉及直接访问底层数据源或目标。缓冲流在读取或写入数据时,先将数据存储到内部的缓冲区,然后从缓冲区中读取或写入数据。这样可以减少对底层资源的直接访问次数,提高I/O操作的效率。

  2. 根据数据类型分类:

    • 字节流(Byte Stream):

      • 描述:字节流以字节为单位进行读取和写入操作,适用于处理二进制数据。

      • 包含的流类型:

        • 字节节点流(Byte Node Stream):直接与字节数据源或目标进行交互的节点流。
        • 缓冲字节流(Buffered Byte Stream):包装了字节节点流的缓冲流。
    • 字符流(Character Stream):

      • 描述:字符流以字符为单位进行读取和写入操作,适用于处理文本数据。
      • 包含的流类型:
        • 字符节点流(Character Node Stream):直接与字符数据源或目标进行交互的节点流。
        • 缓冲字符流(Buffered Character Stream):包装了字符节点流的缓冲流。
    • 区别:字节流处理的是二进制数据,适合于处理图像、音频、视频等非文本数据。字符流处理的是文本数据,提供了对字符编码的支持,适合于处理文本文件、配置文件等。

Java学习day13_第1张图片

输入/输出(IO)

输入/输出(IO)是与外部环境进行数据交互的基本操作。在Java中,我们使用IO流来读取和写入数据。

IO流的分类

Java中的IO流分为字节流和字符流。字节流用于处理二进制数据,而字符流用于处理文本数据。

常见的字节流类有:InputStreamOutputStreamFileInputStreamFileOutputStream等。

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

public class ByteNodeStreamExample {
    public static void main(String[] args) {
        try {
            FileInputStream inputStream = new FileInputStream("input.txt");
            FileOutputStream outputStream = new FileOutputStream("output.txt");

            int data;
            while ((data = inputStream.read()) != -1) {
                outputStream.write(data);
            }

            inputStream.close();
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

缓冲

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

public class BufferedByteStreamExample {
    public static void main(String[] args) {
        try {
            BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream("input.txt"));
            BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream("output.txt"));

            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, bytesRead);
            }

            inputStream.close();
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

常见的字符流类有:ReaderWriterFileReaderFileWriter等。

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

public class CharacterNodeStreamExample {
    public static void main(String[] args) {
        try {
            FileReader reader = new FileReader("input.txt");
            FileWriter writer = new FileWriter("output.txt");

            int data;
            while ((data = reader.read()) != -1) {
                writer.write(data);
            }

            reader.close();
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

缓冲

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class BufferedCharacterStreamExample {
    public static void main(String[] args) {
        try {
            BufferedReader reader = new BufferedReader(new FileReader("input.txt"));
            BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"));

            String line;
            while ((line = reader.readLine()) != null) {
                writer.write(line);
                writer.newLine();
            }

            reader.close();
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

文件的读写操作

文件的读写是IO操作中最常见的任务之一。下面是一些文件读写的示例:

读取文件内容
try (BufferedReader reader = new BufferedReader(new FileReader("data.txt"))) {
    String line;
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }
} catch (IOException e) {
    e.printStackTrace();
}
写入文件内容
try (BufferedWriter writer = new BufferedWriter(new FileWriter("data.txt"))) {
    writer.write("Hello, World!");
} catch (IOException e) {
    e.printStackTrace();
}

文件(File)

在Java中,我们可以使用java.io.File类进行文件的常见操作,如创建文件、删除文件、重命名文件等。下面是一些文件处理的示例:

创建文件
File file = new File("data.txt");
try {
    if (file.createNewFile()) {
        System.out.println("文件创建成功!");
    } else {
        System.out.println("文件已存在!");
    }
} catch (IOException e) {
    e.printStackTrace();
}
删除文件
File file = new File("data.txt");
if (file.delete()) {
    System.out.println("文件删除成功!");
} else {
    System.out.println("文件删除失败!");
}
重命名文件
File file = new File("data.txt");
File newFile = new File("newdata.txt");
if (file.renameTo(newFile)) {
    System.out.println("文件重命名成功!");
} else {
    System.out.println("文件重命名失败!");
}
System.out.println("文件删除成功!");

} else {
System.out.println(“文件删除失败!”);
}


#### 重命名文件

```java
File file = new File("data.txt");
File newFile = new File("newdata.txt");
if (file.renameTo(newFile)) {
    System.out.println("文件重命名成功!");
} else {
    System.out.println("文件重命名失败!");
}

你可能感兴趣的:(java,学习)