一、IO流概念与应用
-
什么是IO流?
想象一下水管流水,水从一端流入流出的过程就像是数据在程序中的传输。在Java世界里,IO流就是这样一个抽象概念,它是数据在不同存储介质或网络之间传输的一种方式。简单来说,如果你把数据看作水流,那么IO流就是承载这个水流的管道,它可以用来读取文件、网络数据,也可以用来写出数据到文件、网络中去。
// 创建一个字节流来读取文件
FileInputStream fis = new FileInputStream("test.txt");
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) != -1) {
// 处理读取到的字节流
}
fis.close();
// 创建一个字节流来写出数据到文件
FileOutputStream fos = new FileOutputStream("output.txt");
fos.write("Hello, World!".getBytes());
fos.close();
-
IO流分类
Java的IO流分为两大类:字节流和字符流。
• 字节流:处理原始的二进制数据,如InputStream和OutputStream及其子类,适用于读写图片、音频、视频等非文本文件。
• 字符流:基于字节流之上,加入了字符集转换,用于处理文本数据,如Reader和Writer及其子类,便于我们直接操作字符而非字节。
3.文件操作与文件夹遍历
Java提供了java.io.File类来进行文件和目录操作,例如:
File file = new File("/path/to/file");
if (file.exists()) {
System.out.println("File name: " + file.getName());
System.out.println("Absolute path: " + file.getAbsolutePath());
System.out.println("Parent directory: " + file.getParent());
System.out.println("File size in bytes: " + file.length());
// 遍历文件夹及子文件夹下的所有文件
if (file.isDirectory()) {
File[] files = file.listFiles();
for (File child : files) {
// 对每个子文件/子目录进行操作
}
}
}
二、网络编程基础与Socket编程
1.网络编程简介
网络编程是指利用网络协议(如TCP/IP)在不同的计算机间建立连接并交换数据。Java的网络编程主要集中在java.net包下。
2.Socket编程实现
在Java中,Socket和ServerSocket类是网络通信的核心,它们分别用于客户端和服务端。
实例:简单的Socket通信
• 服务器端(监听客户端连接请求并发送响应):
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(8000); // 创建ServerSocket监听8000端口
Socket socket = serverSocket.accept(); // 接受客户端连接请求
// 获取Socket输出流向客户端发送数据
OutputStream outToClient = socket.getOutputStream();
PrintWriter out = new PrintWriter(outToClient, true);
out.println("Hello from Server!");
// 在完成通信后关闭资源
socket.close();
serverSocket.close();
}
}
客户端(连接服务器并接收响应):
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("localhost", 8000); // 连接到本地服务器8000端口
// 获取Socket输入流读取服务器发送的数据
InputStream inFromServer = socket.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inFromServer));
String line = reader.readLine();
System.out.println("Received from Server: " + line);
// 完成通信后关闭资源
reader.close();
socket.close();
}
}
总结
IO流和网络编程是Java开发中的核心技术之一。熟练掌握它们可以帮助你轻松应对文件操作、数据传输以及网络通信任务。在实际应用中,记得妥善处理异常,遵循良好的编程习惯,比如使用try-with-resources语句自动关闭流资源,确保程序的健壮性。
练习
1. 实践练习:创建一个Java程序,使用IO流读取一个文本文件,统计其中的单词数量,并将结果写入另一个文件。
2. 网络通信:扩展上面的Socket示例,实现一个简单的聊天程序,允许用户在客户端之间互相发送消息。
亲爱的读者,感谢您关注与支持我的博客。您的每一份鼓励都是我前行的动力。若我的文章曾给您带来收获或启发,欢迎打赏支持。打赏款项将用于提升内容质量,为您提供更优质的阅读体验。无论结果如何,都感恩您的陪伴,让我们共同在知识的世界里探索前行!