Java文件操作是开发中的核心技能,本文将深入解析File和RandomAccessFile两大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("文件已存在");
}
}
}
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完成高效读写,掌握这些技能将大幅提升开发效率。