2013-03-27 214 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()方法,你可以在两个实例中使用(在交换设计简单性时考虑的事情)。