从文件读取Java。结果不好

时间:2019-01-21 10:19:10

标签: java file

我希望程序读取文本为“ 1 2 3”的文件。

我正在用代码完成

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.logging.FileHandler;

public class ReadingFromFile {
    public static void main(String[] args) throws FileNotFoundException {
        String separator = File.separator;
        String path = separator + "Users" + separator + "aa" + separator + "Desktop" + separator + "test.rtf";


        File file = new File(path);

        Scanner scanner = new Scanner(file);
        while (scanner.hasNextLine()) {
            System.out.println(scanner.nextLine());
        }

        scanner.close();
    }
}

但是得到的结果是:

    {\rtf1\ansi\ansicpg1251\cocoartf1671\cocoasubrtf200
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
{\*\expandedcolortbl;;}
\paperw11900\paperh16840\margl1440\margr1440\vieww10800\viewh8400\viewkind0
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0

\f0\fs24 \cf0 1 2 3}

Process finished with exit code 0

如何获得更清晰的结果? (只有1 2 3) IntelliJ IDEA没有显示任何错误。 哪里有错?

1 个答案:

答案 0 :(得分:1)

该文本实际上是RTF富文本。

旧的Java swing可以读取HTML以及RTF。然后有一个带有字体和样式的StyledDocument,可以从中提取纯文本。

Path path = Paths.get("/Users/aa/Desktop/test.rtf";
try (Reader reader = Files.newBufferedReader(path)) {
    JEditorPane pane = new JEditorPane();
    pane.setContentType("text/rtf");
    EditorKit kit = pane.getEditorKitForContentType("text/rtf");
    Document doc = pane.getDocument();
    kit.read(reader, doc, 0);
    String text = doc.getText(0, doc.getLength());
    System.out.println();
}

使用RTF的EditorKit中的StyledDocument,可能无需摆动组件JEditorPane即可执行此操作。