2013-03-27 97 views
0

Im在java中編寫一個字典,用戶輸入單詞並按字母順序存儲在.txt文件中。當我自己使用SortWords方法時,它工作正常,但是當我將它與用於向字典添加單詞的Option1Method結合使用時,它的工作量很大。它像它改變文本文件的文件類型或東西?任何幫助將不勝感激文本文件詞典Java

public static void Option1Method() throws IOException { 
    FileWriter aFileWriter = new FileWriter("wordlist.txt", true); 
    PrintWriter out = new PrintWriter(aFileWriter); 
    String word = JOptionPane.showInputDialog(null, "Enter a word"); 

    out.println(word); 
    out.close(); 

    aFileWriter.close(); 

    String inputFile = "wordlist.txt"; 
    String outputFile = "wordlist.txt"; 
    FileReader fileReader = new FileReader(inputFile); 
    BufferedReader bufferedReader = new BufferedReader(fileReader); 
    String inputLine; 
    List<String> lineList = new ArrayList<String>(); 
    while ((inputLine = bufferedReader.readLine()) != null) { 
     lineList.add(inputLine); 
    } 
    fileReader.close(); 

    Collections.sort(lineList); 

    FileWriter fileWriter = new FileWriter(outputFile); 
    PrintWriter out1 = new PrintWriter(fileWriter); 
    for (String outputLine : lineList) { 
     out.println(outputLine); 
    } 
    out1.flush(); 
    out1.close(); 
    fileWriter.close(); 
} 
+4

你能正確格式化你的代碼嗎? – Abubakkar 2013-03-27 16:50:40

+0

對不起,新來這個。它應該如何格式化? – user2205055 2013-03-27 16:54:56

+1

這應該讓你開始 – 2013-03-27 16:55:58

回答

1

OK的,因爲我不能讓這個問題置之不理這裏是一個如何做到這一點使用一些內置類一個簡單的例子:

import java.io.*; 
import java.util.*; 

public class q15664563 { 
    public static void main(String[] args) throws IOException { 
    String wordlist = "wordlist.txt"; 
    if(args.length == 1 && args[0].toLowerCase().charAt(0) == 'l') { 
     //List Words 
     SortedSet<String> dictionary = load(wordlist); 
     for(String word : dictionary) { 
     System.out.println(word); 
     } 
    } else if(args.length == 2 && args[0].toLowerCase().charAt(0) == 'a') { 
     //Add Word 
     SortedSet<String> dictionary = load(wordlist); 

     dictionary.add(args[1].toLowerCase()); 

     save(dictionary, wordlist); 
    } else { 
     System.err.println("Correct usage:"); 
     System.err.println(" q15664563 LIST  --lists all words"); 
     System.err.println(" q15664563 ADD [word] --adds word to list"); 
    } 
    } 

    private static void save(SortedSet<String> dictionary, String wordlist) throws IOException { 
    FileWriter file = new FileWriter(wordlist); 
    BufferedWriter writer = new BufferedWriter(file); 

    for(String word : dictionary) { 
     writer.append(word); 
     writer.newLine(); 
    } 

    writer.close(); 
    file.close(); 
    } 

    private static SortedSet<String> load(String wordlist) throws IOException { 
    SortedSet<String> dictionary = new TreeSet<String>(); 
    FileReader file = new FileReader(wordlist); 
    BufferedReader reader = new BufferedReader(file); 
    String word; 

    while((word = reader.readLine()) != null) { 
     dictionary.add(word); 
    } 

    reader.close(); 
    file.close(); 
    return dictionary; 
    } 
} 

有些事情爲了指出這段代碼,閱讀和寫作是兩個獨立的操作,所以爲了保持事物清潔,它有助於將它們放入自己的功能(這當然是一個意見問題)。此外,正如情況經常出現,有數據類型可以幫助您,而TreeSet就是一個很好的例子。它實現了SortedSet接口,並且在每次迭代ti時都按字母順序排列(實際上,每次插入時都按字母順序排列,隨着集合長度的增長要記住一些事項)。如果您想優化此屬性,只需使用TreeSet,當列表可能會更改它的字母順序時(插入時)。列出時,您會逐行讀取文件,知道文件的順序是正確的。如果你這樣做了,那麼你將不再有一個通用的load()方法,你可以在兩個實例中使用(在交換設計簡單性時考慮的事情)。