欢迎访问宙启技术站
智能推送

Java中如何使用IO类函数进行文件和网络操作?

发布时间:2023-06-22 09:42:26

Java中的IO类库提供了强大的文件和网络操作功能,使得开发者可以方便地进行文件或网络操作。本文将介绍Java中如何使用IO类函数进行文件和网络操作。

一、文件操作

Java提供了两个类来处理文件操作:File类和InputStream/OutputStream类。

1.使用File类进行文件操作

File类包含了一个文件或目录(文件夹)的名称和路径,可以用它来创建、删除、修改和查询文件和目录。

1.1 创建文件

使用File类可以很方便地创建文件。例如,我们要在D:\test目录下创建一个名为test.txt的文件,可以按照以下方式进行创建:

File file = new File("D:\\test", "test.txt"); // 创建File对象,指定文件路径
if (!file.exists()) { // 如果文件不存在
   file.createNewFile(); // 创建文件
}

1.2 删除文件

要删除文件可以使用File类提供的delete()方法。例如,我们要删除D:\test目录下的test.txt文件,可以按照以下方式进行删除:

File file = new File("D:\\test\\test.txt"); // 创建File对象,指定文件路径
if (file.exists()) { // 如果文件存在
    file.delete(); // 删除文件
}

1.3 修改文件名

使用File类提供的renameTo()方法可以修改文件名。例如,我们要将D:\test目录下的test.txt文件改为test2.txt,可以按照以下方式进行修改:

File oldfile = new File("D:\\test\\test.txt"); // 创建File对象,指定要修改的文件路径
File newfile = new File("D:\\test\\test2.txt"); // 创建File对象,指定修改后的文件路径
if(oldfile.renameTo(newfile)){
     System.out.println("修改成功!");
}else{
     System.out.println("修改失败!");
}

1.4 查询文件信息

使用File类提供的length()、lastModified()、isFile()、isDirectory()等方法可以查询文件的大小、创建时间、文件类型等信息。例如,我们要查询D:\test目录下的test.txt文件的创建时间和文件大小,可以按照以下方式进行查询:

File file = new File("D:\\test\\test.txt"); // 创建File对象,指定文件路径
if (file.exists() && file.isFile()) { // 如果文件存在且是文件
    long length = file.length(); // 文件大小
    long lastModified = file.lastModified(); // 文件创建时间
    System.out.println("文件大小:" + length + " bytes");
    System.out.println("文件创建时间:" + new Date(lastModified));
}

2.使用InputStream/OutputStream类进行文件操作

InputStream/OutputStream是Java中最基本的输入输出流类,它们是抽象类,不可以直接使用,但它们的子类可以用来完成各种输入输出操作。这些子类都是实现了输入输出的具体细节。

2.1 文件读取

使用InputStream类可以很方便地读取文件。例如,我们要读取D:\test目录下的test.txt文件的内容,可以按照以下方式进行读取:

File file = new File("D:\\test\\test.txt"); // 创建File对象,指定文件路径
InputStream in = new FileInputStream(file); // 创建InputStream对象,指定文件输入流
byte[] buffer = new byte[1024]; // 创建缓冲区
int len = 0; // 每次读取的字节数
while ((len = in.read(buffer)) != -1) { // 每次读取缓冲区大小的字节
    System.out.println(new String(buffer, 0, len)); // 输出每次读取的内容
}
in.close(); // 关闭输入流

2.2 文件写入

使用OutputStream类可以很方便地写入文件。例如,我们要向D:\test目录下的test.txt文件写入内容,可以按照以下方式进行写入:

File file = new File("D:\\test\\test.txt"); // 创建File对象,指定文件路径
OutputStream out = new FileOutputStream(file); // 创建OutputStream对象,指定文件输出流
String content ="Hello World!"; // 指定写入文件的内容
byte[] buffer = content.getBytes(); // 将字符串转化为字节数组
out.write(buffer); // 将字节数组写入文件
out.flush(); // 刷新输出流
out.close(); // 关闭输出流

二、网络操作

Java提供了两个类来处理网络操作:Socket类和ServerSocket类。

1.Socket类

Socket类提供了一种通信机制,可以使用它进行数据的发送和接收。Socket连接的两端分别是客户端和服务器端。

1.1 客户端

客户端可以通过Socket的connect()方法连接服务器端。例如,我们要连接IP地址为192.168.0.100,端口号为8899的服务器,可以按照以下方式进行连接:

Socket socket = new Socket("192.168.0.100", 8899); // 创建Socket对象,指定服务器地址和端口号
OutputStream out = socket.getOutputStream(); // 获取输出流,用来向服务器发送数据
String message = "Hello, server!"; // 指定要发送的数据
out.write(message.getBytes("UTF-8")); // 将发送数据转为字节数组,发送给服务器
out.flush(); // 刷新输出流
out.close(); // 关闭输出流
socket.close(); // 释放资源

客户端可以通过Socket的getInputStream()方法获取输入流,从而接收服务器端发送的数据。

Socket socket = new Socket("192.168.0.100", 8899); // 创建Socket对象,指定服务器地址和端口号
InputStream in = socket.getInputStream(); // 获取输入流,用来接收服务器发送的数据
byte[] buffer = new byte[1024]; // 创建缓冲区
int len = 0; // 表示每次读取的实际字节数
StringBuilder sb = new StringBuilder(); // 创建StringBuilder对象,用来存储数据
while ((len = in.read(buffer)) != -1) { // 每次读取最多1024个字节的数据
    sb.append(new String(buffer, 0, len)); // 将数据添加到StringBuilder中
}
System.out.println(sb.toString()); // 输出接收到的数据
in.close(); // 关闭输入流
socket.close(); // 释放资源

2.ServerSocket类

ServerSocket类用于创建一个服务器端,它在指定的端口侦听客户端的请求并提供服务。当有客户端请求连接时,ServerSocket类的accept()方法会返回一个Socket实例,从而建立了客户端与服务器端的连接。

2.1 服务器端

例如,我们要创建一个在8899端口监听的服务器,可以按照以下方式进行创建:

ServerSocket server = new ServerSocket(8899); // 创建ServerSocket对象,指定端口号
Socket socket = server.accept(); // 等待客户端连接并返回Socket对象
InputStream in = socket.getInputStream(); // 获取输入流,用来接收客户端发送的数据
byte[] buffer = new byte[1024]; // 创建缓冲区
int len = 0; // 表示每次读取的实际字节数
StringBuilder sb = new StringBuilder(); // 创建StringBuilder对象,用来存储数据
while ((len = in.read(buffer)) != -1) { // 每次读取最多1024个字节的数据
    sb.append(new String(buffer, 0, len)); // 将数据添加到StringBuilder中
}
System.out.println(sb.toString()); // 输出接收到的数据
OutputStream out = socket.getOutputStream(); // 获取输出流,用来向客户端发送数据
out.write("Hello, client!".getBytes("UTF-8")); // 发送数据给客户端
out.flush(); // 刷新输出流
out.close(); // 关闭输出流
in.close(); // 关闭输入流
socket.close(); // 关闭Socket对象
server.close(); // 关闭ServerSocket对象

服务器端可以使用ServerSocket类的accept()方法从等待队列中取出客户端请求,获取客户端连接,并通过Socket类提供的方法,获取客户端的输入流和输出流,进行两端的数据传输。