一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Java进阶知识系列-第二篇

时间:2026-06-02 16:20:01 编辑:袖梨 来源:一聚教程网

Java文件操作是开发中的核心技能,本文将深入解析File和RandomAccessFile两大API的使用方法与实战技巧。

Java 进阶知识(二)

File API

package file;import java.io.File;/**
 * java.io.File类用于表示文件系统对象,
 * 可获取文件属性、执行文件操作,但不支持
 * 文件内容读写。
 */
public class FileDemo {
	public static void main(String[] args) {
		File file = new File("./test.txt");
		System.out.println("文件名:"+file.getName());
		System.out.println("文件大小:"+file.length()+"字节");
		System.out.println("可写:"+file.canWrite());
		System.out.println("可读:"+file.canRead());
		System.out.println("隐藏属性:"+file.isHidden());
	}
}
package file;import java.io.File;/**
 * 文件删除操作演示
 */
public class DeleteFileDemo {
	public static void main(String[] args) {
		File file = new File("./demo.txt");
		if(file.exists()) {
			file.delete();
			System.out.println("文件删除成功");
		}else {
			System.out.println("目标文件不存在");
		}
	}
}
package file;import java.io.File;/**
 * 单级目录创建示例
 */
public class MkDirDemo {
	public static void main(String[] args) {
		File dir = new File("./demo");
		if(!dir.exists()) {
			dir.mkdir();
			System.out.println("目录创建成功");
		}else {
			System.out.println("目录已存在");
		}
	}
}
package file;import java.io.File;/**
 * 多级目录创建实现
 */
public class MkDirsDemo {
	public static void main(String[] args) {
		File dir = new File("./a/b/c/d/e/f");
		if(!dir.exists()) {
			dir.mkdirs();
			System.out.println("多级目录创建完成");
		}else {
			System.out.println("目录结构已存在");
		}
	}
}
package file;import java.io.File;/**
 * 目录删除操作注意事项
 */
public class DeleteDirDemo {
	public static void main(String[] args) {
		File dir = new File("./demo");
		if(dir.exists()) {
			dir.delete();
			System.out.println("目录删除成功");
		}else {
			System.out.println("目录不存在");
		}
	}
}
package file;import java.io.File;/**
 * 目录遍历实现方案
 */
public class ListFilesDemo {
	public static void main(String[] args) {
		File dir = new File(".");
		if(dir.isDirectory()) {
			File[] subs = dir.listFiles();
			for(File sub : subs) {
				System.out.println(sub.getName());
			}
		}	}
}
package file;import java.io.File;/**
 * 递归删除文件/目录工具类
 */
public class Test {
	public static void main(String[] args) {
		File dir = new File("./a");
		delete(dir);
	}
	
	public static void delete(File f) {
		if(f.isDirectory()) {
			for(File sub : f.listFiles()) {
				delete(sub);
			}
		}
		f.delete();
	}
}
package file;import java.io.File;
import java.io.FileFilter;/**
 * 文件过滤器应用实例
 */
public class ListFilesDemo2 {
	public static void main(String[] args) {
		File dir = new File(".");
		File[] subs = dir.listFiles(new FileFilter() {
			public boolean accept(File file) {
				return file.getName().startsWith(".");
			}		
		});
		for(File sub : subs) {
			System.out.println(sub.getName());
		}
	}
}
package file;import java.io.File;
import java.io.IOException;/**
 * 文件创建方法演示
 */
public class CreateNewFileDemo {
	public static void main(String[] args) throws IOException {
		File file = new File("./demo.txt");
		if(!file.exists()) {
			file.createNewFile();
			System.out.println("文件创建成功");
		}else {
			System.out.println("文件已存在");
		}
	}
}

RandomAccessFile API

package raf;import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;/**
 * 随机访问文件基础操作
 */
public class RafDemo {
	public static void main(String[] args) throws IOException {
		RandomAccessFile raf = new RandomAccessFile("raf.dat","rw");
		raf.write(1);
		System.out.println("数据写入完成");
		raf.close();
	}
}
package raf;import java.io.IOException;
import java.io.RandomAccessFile;/**
 * 文件读取操作实现
 */
public class ReadDemo {
	public static void main(String[] args) throws IOException {
		RandomAccessFile raf = new RandomAccessFile("raf.dat","r");
		int data = raf.read();
		System.out.println("读取数据:"+data);
		raf.close();
	}
}
package raf;import java.io.IOException;
import java.io.RandomAccessFile;/**
 * 文件复制功能实现
 */
public class CopyDemo {
	public static void main(String[] args) throws IOException {
		RandomAccessFile src = new RandomAccessFile("movie.wmv","r");
		RandomAccessFile desc = new RandomAccessFile("movie_cp.wmv","rw");
		int d = -1;
		while((d = src.read())!=-1) {
			desc.write(d);
		}
		System.out.println("文件复制完成");
		src.close();
		desc.close();
	}
}
package raf;import java.io.IOException;
import java.io.RandomAccessFile;/**
 * 高效文件复制方案
 */
public class CopyDemo2 {
	public static void main(String[] args) throws IOException {
		RandomAccessFile src = new RandomAccessFile("nox.exe","r");
		RandomAccessFile desc = new RandomAccessFile("nox_cp.exe","rw");
		byte[] buf = new byte[1024*10];
		int len = -1;
		while((len = src.read(buf))!=-1) {
			desc.write(buf,0,len);
		}
		System.out.println("高效复制完成");
		src.close();
		desc.close();
	}
}
package raf;import java.io.IOException;
import java.io.RandomAccessFile;/**
 * 字符串写入文件实现
 */
public class WriteStringDemo {
	public static void main(String[] args) throws IOException {
		RandomAccessFile raf = new RandomAccessFile("raf.txt","rw");
		String str = "示例文本内容";
		raf.write(str.getBytes("UTF-8"));
		System.out.println("字符串写入完成");
		raf.close();
	}
}
package raf;import java.io.IOException;
import java.io.RandomAccessFile;/**
 * 字符串读取操作实现
 */
public class ReadStringDemo {
	public static void main(String[] args) throws IOException {
		RandomAccessFile raf = new RandomAccessFile("raf.txt","r");
		byte[] data = new byte[(int)raf.length()];
		raf.read(data);
		System.out.println("读取内容:"+new String(data,"UTF-8"));
		raf.close();
	}
}
package raf;import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Scanner;/**
 * 简易记事本实现
 */
public class Test {
	public static void main(String[] args) throws IOException {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入文件名:");
		String fileName = scanner.nextLine();
		RandomAccessFile raf = new RandomAccessFile(fileName,"rw");
		System.out.println("请输入内容(exit退出):");
		String line = "";
		while(!(line = scanner.nextLine()).equals("exit")) {
			raf.write(line.getBytes("UTF-8"));
		}
		System.out.println("记事本已保存");
		raf.close();
	}
}
package raf;import java.io.IOException;
import java.io.RandomAccessFile;/**
 * 基本数据类型读写操作
 */
public class RafDemo2 {
	public static void main(String[] args) throws IOException {
		RandomAccessFile raf = new RandomAccessFile("raf.dat","rw");
		// 写入int最大值
		raf.writeInt(Integer.MAX_VALUE);
		// 写入long值
		raf.writeLong(123L);
		// 写入double值
		raf.writeDouble(123.123);
		
		// 读取操作
		raf.seek(0);
		System.out.println("int值:"+raf.readInt());
		raf.seek(8);
		System.out.println("long值:"+raf.readLong());
		System.out.println("double值:"+raf.readDouble());
		raf.close();
	}
}
package raf;import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;
import java.util.Scanner;/**
 * 用户注册功能实现
 */
public class RegDemo {
	public static void main(String[] args) throws IOException {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入用户名:");
		String username = scanner.nextLine();
		System.out.println("请输入密码:");
		String password = scanner.nextLine();
		System.out.println("请输入昵称:");
		String nickname = scanner.nextLine();
		System.out.println("请输入年龄:");
		int age = Integer.parseInt(scanner.nextLine());
		
		RandomAccessFile raf = new RandomAccessFile("user.dat","rw");
		raf.seek(raf.length());
		
		// 写入用户名(32字节)
		byte[] data = username.getBytes("UTF-8");
		data = Arrays.copyOf(data, 32);
		raf.write(data);
		
		// 写入密码(32字节)
		data = password.getBytes("UTF-8");
		data = Arrays.copyOf(data, 32);
		raf.write(data);
		
		// 写入昵称(32字节)
		data = nickname.getBytes("UTF-8");
		data = Arrays.copyOf(data, 32);
		raf.write(data);
		
		// 写入年龄(4字节)
		raf.writeInt(age);
		
		System.out.println("注册成功");
		raf.close();
	}
}
package raf;import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;
import java.util.Scanner;/**
 * 用户信息修改功能
 */
public class UpdateDemo {
	public static void main(String[] args) throws IOException {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入要修改的用户名:");
		String username = scanner.nextLine();
		System.out.println("请输入新昵称:");
		String nickname = scanner.nextLine();
		
		RandomAccessFile raf = new RandomAccessFile("user.dat","rw");
		boolean updated = false;
		for(int i=0;i100;i++) {
			raf.seek(i*100);
			byte[] data = new byte[32];
			raf.read(data);
			String name = new String(data,"UTF-8").trim();
			if(name.equals(username)) {
				raf.seek(i*100+64);
				data = nickname.getBytes("UTF-8");
				data = Arrays.copyOf(data, 32);
				raf.write(data);
				updated = true;
				System.out.println("修改成功");
				break;
			}
		}
		if(!updated) {
			System.out.println("用户不存在");
		}
		raf.close();
	}
}
package raf;import java.io.IOException;
import java.io.RandomAccessFile;/**
 * 用户信息查询功能
 */
public class ShowAllUserDemo {
	public static void main(String[] args) throws IOException {
		RandomAccessFile raf = new RandomAccessFile("user.dat","r");
		for(int i=0;i100;i++) {
			byte[] data = new byte[32];
			// 读取用户名
			raf.read(data);
			String username = new String(data,"UTF-8").trim();
			// 读取密码
			raf.read(data);
			String password = new String(data,"UTF-8").trim();
			// 读取昵称
			raf.read(data);
			String nickname = new String(data,"UTF-8").trim();
			// 读取年龄
			int age = raf.readInt();
			System.out.println(username+"t"+password+"t"+nickname+"t"+age);
		}
		raf.close();
	}
}

本文详细讲解了Java文件操作的核心API,通过File类实现文件系统管理,借助RandomAccessFile完成高效读写,掌握这些技能将大幅提升开发效率。

热门栏目