流(stream)简介

本文介绍了Java中的IO流概念及其分类,包括输入流和输出流、字节流与字符流等,并通过具体示例展示了如何使用FileInputStream、FileOutputStream、FileReader和FileWriter进行文件操作。
流:在java程序中,对于数据的输入/输出操作以”流”(stream)方式进行;J2SDK提供了各种各样的”流”类,用以获取不同种类的数据;程序中通过标准的方法输入或输出数据

输入/输出流的分类:java.io 包中定义了多个流类型(类或抽象类)来实现输入/输出功能;可以从不同的角度对其进行分类:按数据流的方向不同可以分为输入流和输出流;按处理数据单位不同可以分为字节流和字符流;按功能不同可以分为节点流和处理流

四种抽象流类型:InputStream(字节流)、OutputStream、Reader(字符(2字节)流)、Writer

节点流:可以从一个特定的数据源(节点)读写数据(如文件、内存)

处理流:“连接“在已经存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能
/*TestFileInputStream.java*/
import java.io.*;

public class TestFileInputStream {
public static void main(String[] args) {
int b = 0;
FileInputStream in = null;
try { //从文件输入
in = new FileInputStream("F:/TestFileInputStream.java");
//分隔用一正斜线(/)或二反斜线(\\)
} catch (FileNotFoundException e) {
System.out.println("找不到指定文件");
System.exit(-1);
}

try {
long num = 0;
while ((b = in.read()) != -1) { // 以字节为单位读取
System.out.print((char) b);
num++; // 计数
}
in.close();
System.out.println();
System.out.println("共读取了 " + num + " 个字节");
} catch (IOException e1) {
System.out.println("文件读取错误");
System.exit(-1);
}
}
}

 /*TestFileOutputStream.java*/
import java.io.*;

public class TestFileOutputStream {
public static void main(String[] args) {
int b = 0;
FileInputStream in = null;
FileOutputStream out = null;
try {
in = new FileInputStream("F:/HelloWorld.java");//从文件读入
out = new FileOutputStream( "F:/HW.java");//输出的目的文件

while ((b = in.read()) != -1) { // 以字节为单位读取
out.write(b);
}
in.close();
out.close();
} catch (FileNotFoundException e2) {
System.out.println("找不到指定文件");
System.exit(-1);
} catch (IOException e1) {
System.out.println("文件复制错误");
System.exit(-1);
}
System.out.println("文件已复制");
}
}

/*TestFileReader.java*/
import java.io.*;

public class TestFileReader {
public static void main(String[] args) {
FileReader fr = null;
int c = 0;
try {
fr = new FileReader("d:\\TestFileReader.java"); //读入文件
@SuppressWarnings("unused")
int ln = 0;
while ((c = fr.read()) != -1) { // 以字符为单位读取
// char ch = (char) fr.read();
System.out.print((char) c);
// if (++ln >= 100) { System.out.println(); ln = 0;}
}
fr.close();
} catch (FileNotFoundException e) {
System.out.println("找不到指定文件");
} catch (IOException e) {
System.out.println("文件读取错误");
}

}
}

/*TestFileWriter.java*/
import java.io.*;

public class TestFileWriter {
public static void main(String[] args) {
FileWriter fw = null;
try {
fw = new FileWriter("d:/unicode.dat");//写入的目的文件
for (int c = 0; c <= 50000; c++) {
fw.write(c); // 将0至50000的字符写入unicode.dat
}
fw.close();
} catch (IOException e1) {
e1.printStackTrace();
System.out.println("文件写入错误");
System.exit(-1);
}
}
}
### Stream 简介 Stream 是一种用于处理集合数据的强大工具,能够将集合中的元素视为一条连续的数据,在管道中进行多种操作。这种设计模式不仅简化了代码逻辑,还提高了程序运行效率,并且支持并行化处理[^2]。 ### 中间操作与终端操作 一个典型的 Stream 处理程由两部分组成: - **中间操作**:这类操作主要用于开启并对其中的数据项实施不同程度上的转换或筛选工作,每次都会创建一个新的实例供后续环节继续加工使用。常见的中间操作有 `filter` (过滤), `map` (映射),以及 `sorted` (排序)[^1]。 - **终端操作**:当遇到诸如 `forEach`, `collect` 这样的终止型指令时,则会触发整个水线式的运算过程正式开始运作起来,最终得出所需的结果集或是完成特定的任务目标[^3]。 ### 实际应用案例 下面是一个简单的 Java 例子来展示如何利用 Streams API 对列表内的字符串对象按照长度降序排列后再打印出来: ```java import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { List<String> words = Arrays.asList("apple", "banana", "orange"); // 使用stream()方法获取对象, 接着调用一系列中间操作最后以terminal operation结束. words.stream() .sorted((w1, w2) -> Integer.compare(w2.length(), w1.length())) // 中间操作: 按照单词长度逆序排序 .forEach(System.out::println); // 终端操作: 输出每一个元素 } } ``` 此段代码首先定义了一个包含三个水果名称的列表;接着通过 `.stream()` 方法将其转化为可迭代形式——即所谓的“”。之后依次进行了两个主要步骤的操作:首先是基于自定义比较器实现按字串长短倒叙整理的功能(`sorted`);其次是运用遍历方式逐个输出经上述变换后的每一项内容(`forEach`)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值