【问题标题】:Is there a way in Java to read new line characters in a text file?Java中有没有办法读取文本文件中的换行符?
【发布时间】:2021-10-21 02:25:10
【问题描述】:

我正在实施一个霍夫曼编码程序。我对整本书进行编码和解码,因此找到换行符非常重要,不幸的是,我忽略了这一点。目前,我使用一种方法将小书读入一个字符串,然后返回,见下文:

private String readFile(String filename) {
    String curLine;
    String toReturn = "";
    try {
        BufferedReader reader = new BufferedReader(new FileReader(filename));
        try {
            while ((curLine = reader.readLine()) != null) {
                toReturn += curLine;
            }
        } catch (IOException e) {
            System.out.println(e);
        }
    } catch (FileNotFoundException e) {
        System.out.println(e);
    }
    return toReturn;
}

这适用于常规字符,但不适用于换行符之类的东西(我知道这些类型的“字符”有一个词,但我现在正在空白)。无论如何,我的问题是如何更改当前方法以也拾取 newLine 字符,或者我需要做一些完全不同的事情。我怀疑 readLine() 现在对我没有好处,但我想在这里检查一些输入。

我的程序中的其他所有东西都很好,但是没有考虑换行符的事实搞砸了我的整个霍夫曼树,我相信你明白从那里发生的事情。对于我可以做些什么来获取换行符的任何建议将不胜感激。谢谢!

【问题讨论】:

  • 通常您需要面向字节的 IO,而不是面向字符的 IO。想想FileInputStream,也许包裹在BufferedInputStream中。
  • 不是“真实”(可打印或可显示)字符的一般“字符”(在 ASCII、EBCDIC、8859 或 Unicode 等代码中的真正字符 代码)是广泛称为'control' characters。形式上,与换行符和制表符(相对于传输、存储或其他东西)等表示相关的子集称为“格式效应器”,但您不会发现该术语使用得太多。

标签: java encoding ascii newline huffman-code


【解决方案1】:

您可以像这样读取文件中的所有字符。

static String readFile(String filename) throws IOException {
    return Files.readString(Path.of(filename));
}

它读取为 UTF-8,但您可以根据需要使用 readString() 的第二个参数指定编码。

【讨论】:

  • 或者readAllBytes如果你想要字节而不是字符(标准压缩算法通常适用于字节,因此它们不限于文本)
  • 此选项仅适用于 Java 11 及更高版本。有关此问题的更完整答案,请参阅我的回复!
【解决方案2】:

正如上面评论中所建议的,您需要一种面向字节的方法。

java 7 开始,您可以使用Files.readAllBytes(filepath) 方法。 您可以通过这种方式将整个文件内容作为字符串传递;

new String(Files.readAllBytes(filepath));

java 11 开始,您现在可以选择使用 Files.readString(filepath) 来更好地完成相同的操作。

您可以参考此博客以获取将整个文件读取为字符串的更详细选项,包括BufferedReaderhttps://howtodoinjava.com/java/io/java-read-file-to-string-examples/

【讨论】:

  • 这应该我标记为正确答案。
【解决方案3】:

我猜你正在寻找来自 guava 核心库的 Files.toString()。

String content = Files.toString(new File("sample_file.txt"), Charsets.UTF_8);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    • 2022-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多