我希望程序读取文本为“ 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没有显示任何错误。 哪里有错?
答案 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即可执行此操作。