如何使用Java修改文本文件?

时间:2016-01-29 20:13:10

标签: java arrays text-files filewriter printwriter

http://pastebin.com/E5TspHfK - Object Class,名为PhoneBookEntry
http://pastebin.com/Ce94SJzB - Method Class,名为PhoneBook
http://pastebin.com/ENsVT0jJ - Tester Class,名为PhoneBookTester

基本上我的这三个课程的目标是制作一个“电话簿” - 一个基于文本的程序,允许人们创建他们的联系人数据库,他们可以添加条目,编辑/删除/显示条目,搜索和排序条目。

程序正在创建的PhoneBookEntry对象数组将输出到文本文件,该文件以“fName \ tlName \ tnumber”格式显示。这些显然是可以存储在PhoneBookEntry类中的各种变量。

问题是,要写入文本文件我必须使用PrintWriter类,但是如何重新排列数组的顺序,如何更新文本文件?因为我没有向数组发送添加的条目,所以我将它们发送到文本文件本身,但如果使用排序或编辑功能,则修改数组的内容,而不是文本文件。

那么,如果你不能用PrintWriter类“向后写”,我怎么能修改文本文件本身的内容?相关的代码位粘贴在下面。

电话簿:

public static int filledTil=-1;    
FileWriter fw = new FileWriter("C:\\Users\\Hana\\Desktop\\PhoneBook.txt");
PrintWriter output = new PrintWriter(fw);
static PhoneBookEntry[] phoneBook = new PhoneBookEntry[500];

    public PhoneBook() throws IOException {            
        Scanner input = new Scanner(new File("C:\\Users\\Hana\\Desktop\\PhoneBook.txt"));
        while(input.hasNext()){
            Scanner sc = new Scanner(input.nextLine());
            String fName = sc.next();
            String lName = sc.next();
            String number = sc.next();
            filledTil++;
            phoneBook[filledTil] = new PhoneBookEntry(fName, lName, number);
        }
        input.close();
    }

电话簿排序方法

public static int partition(){
            int lo = 0;
            int hi = filledTil;
            PhoneBookEntry temp;
            PhoneBookEntry pivot = phoneBook[(lo + hi) / 2];
            while(lo <= hi){
                while(phoneBook[lo].lName.compareTo(pivot.lName) < 0){
                    lo++;
                }
                while(phoneBook[lo].lName.compareTo(pivot.lName) > 0){
                    hi--;
                }
                if(lo <= hi) {
                    temp = phoneBook[lo];
                    phoneBook[lo] = phoneBook[hi];
                    phoneBook[hi] = temp;
                    lo++;
                    hi--;
                }
            };
            return lo;
        }

        public static void quickSort(int lo, int hi){
            int index = partition();
            if(lo < (index - 1)){
                quickSort(lo, (index-1));
            }
            if(index < hi){
                quickSort(index, hi);
            }
        }

电话簿退出方法

public void quit(){
        output.close();
        System.exit(0);
    }

0 个答案:

没有答案