Java利用文件构建用户电话号码本
1. 简介
电话号码本是一个存储电话号码和相关信息的工具。Java提供了丰富的API和功能,使我们能够轻松地使用文件来构建和管理电话号码本。本文将介绍如何使用Java进行电话号码本的增加、删除、查询和修改操作,并按照指定属性排序和查询。
2. 创建电话号码本类
首先,我们需要创建一个电话号码本类来管理用户的电话号码和相关信息。我们可以使用一个文件来存储这些信息,每行表示一个用户的电话号码和信息。下面是电话号码本类的代码示例:
import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class PhoneBook {
    private String fileName;
    public PhoneBook(String fileName) {
        this.fileName = fileName;
    }
    public void addPhone(String phoneNumber, String info) {
        try {
            FileWriter fileWriter = new FileWriter(fileName, true);
            BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
            bufferedWriter.write(phoneNumber + "," + info);
            bufferedWriter.newLine();
            bufferedWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public void deletePhone(String phoneNumber) {
        try {
            File inputFile = new File(fileName);
            File tempFile = new File("temp.txt");
            BufferedReader reader = new BufferedReader(new FileReader(inputFile));
            BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile));
            String currentLine;
            while ((currentLine = reader.readLine()) != null) {
                if (currentLine.startsWith(phoneNumber + ",")) continue;
                writer.write(currentLine + System.getProperty("line.separator"));
            }
            writer.close();
            reader.close();
            inputFile.delete();
            tempFile.renameTo(inputFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public List<String> searchPhone(String keyword) {
        List<String> result = new ArrayList<>();
        try {
            BufferedReader reader = new BufferedReader(new FileReader(fileName));
            String currentLine;
            while ((currentLine = reader.readLine()) != null) {
                if (currentLine.contains(keyword)) {
                    result.add(currentLine);
                }
            }
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result;
    }
    public void modifyPhone(String phoneNumber, String newInfo) {
        try {
            File inputFile = new File(fileName);
            File tempFile = new File("temp.txt");
            BufferedReader reader = new BufferedReader(new FileReader(inputFile));
            BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile));
            String currentLine;
            while ((currentLine = reader.readLine()) != null) {
                if (currentLine.startsWith(phoneNumber + ",")) {
                    writer.write(phoneNumber + "," + newInfo);
                } else {
                    writer.write(currentLine);
                }
                writer.newLine();
            }
            writer.close();
            reader.close();
            inputFile.delete();
            tempFile.renameTo(inputFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public void sortPhoneBook() {
        List<String> phoneNumbers = new ArrayList<>();
        try {
            BufferedReader reader = new BufferedReader(new FileReader(fileName));
            String currentLine;
            while ((currentLine = reader.readLine()) != null) {
                phoneNumbers.add(currentLine);
            }
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        Collections.sort(phoneNumbers, Comparator.comparing(s -> s.split(",")[1]));
        try {
            FileWriter fileWriter = new FileWriter(fileName);
            BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
            for (String phoneNumber : phoneNumbers) {
                bufferedWriter.write(phoneNumber);
                bufferedWriter.newLine();
            }
            bufferedWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
3. 使用电话号码本类
使用电话号码本类很简单。我们可以通过创建一个实例来调用它的方法,如下所示:
public class Main {
    public static void main(String[] args) {
        PhoneBook phoneBook = new PhoneBook("phonebook.txt");
        // 添加电话号码
        phoneBook.addPhone("1234567890", "John Doe");
        phoneBook.addPhone("2345678901", "Jane Smith");
        // 删除电话号码
        phoneBook.deletePhone("1234567890");
        // 查询电话号码
        List<String> searchResult = phoneBook.searchPhone("Jane");
        for (String result : searchResult) {
            System.out.println(result);
        }
        // 修改电话号码信息
        phoneBook.modifyPhone("2345678901", "Jane Smith, Address: 123 Main St");
        // 按属性排序电话号码本
        phoneBook.sortPhoneBook();
    }
}
4. 总结
在本文中,我们介绍了如何使用Java利用文件构





