FileReader / Scanner读取文件名而不是.txt文件的内容

时间:2017-10-28 12:30:15

标签: java

我试图实现一个从.txt文件中获取字符的Huffman算法。 txt文件包含一段文本。现在当我像这样运行程序时

java HuffmanCode large.txt

它产生输出,但它评估的是文件的名称," large.txt",而不是文件large.txt中的文本。我如何让它来阅读内容?谢谢你的帮助。

public static void main(String[] args) throws IOException  {

        String inputFileName = args[0];
        FileReader reader = new FileReader(inputFileName);
        Scanner in = new Scanner(reader);

        int[] charFreqs = new int[256];
        // read each character and record the frequencies
        for (char c : inputFileName.toCharArray())
            charFreqs[c]++;

        // build tree
        HuffmanTree tree = buildTree(charFreqs);

        // print out results
        System.out.println("SYMBOL\tWEIGHT\tHUFFMAN CODE");
        printCodes(tree, new StringBuffer());
    }
}

1 个答案:

答案 0 :(得分:1)

你真的很接近 - 你只是在inputFileName.toCharArray()上进行迭代,它会给你文件名中的字符。您需要从in变量中读取字符(这将为您提供文件内容),例如:

while (in.hasNextLine())
{
    char[] line = in.nextLine().toCharArray();
    for (char c : line)
        charFreqs[c]++;
}

请注意,这可能会丢弃文件中的任何换行符,因此如果要计算它们,则可能需要手动执行。或者切换到从您已经拥有的char[]读取原始FileReader,这可能是比上面更好的方法(您想要原始字符数据,而不是“文本”数据,这是{{1}操作)。