Java - 在读取文本文件时忽略某些字符

时间:2011-12-11 21:01:49

标签: java input io text-files java.util.scanner

我正在尝试阅读包含以下内容的简单文本文件:

LOAD

比尔的豆子

1200

20

15

30

QUIT

我需要逐行存储和打印内容。我这样做是使用以下代码:

    String inputFile = "(file path here)";
    try {
        Scanner input = new Scanner(inputFile);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    String currentLine = "";
    while (!currentLine.equals("QUIT}")){
        currentLine = input.nextLine();
        System.out.println(currentLine);
    }
    input.close();

然而,输出非常“混乱”。我试图避免存储所有新行字符和文本文件中没有出现的任何其他内容。输出是:

{\ RTF1 \ ANSI \ ansicpg1252 \ cocoartf949 \ cocoasubrtf540

{\ fonttbl \ f0 \ fmodern \ fcharset0 Courier;}

{\ colortbl; \ red255 \ green255 \ blue255;}

\ margl1440 \ margr1440 \ vieww9000 \ viewh8400 \ viewkind0

\ deftab720

\ PARD \ pardeftab720 \ QL \ qnatural

\ f0 \ fs26 \ cf0 LOAD \

比尔的豆子

1200 \

20 \

15 \

30 \

QUIT}

非常感谢任何帮助,谢谢!

3 个答案:

答案 0 :(得分:2)

看起来你正在阅读一个RTF文件,不是这样吗?

否则,我发现阅读文本文件对我来说最自然,使用这个结构:

        BufferedReader reader = new BufferedReader(
                                    new FileReader(new File("yourfile.txt")
                                );
        String text = null;

        // repeat until all lines is read
        while ((text = reader.readLine()) != null) {
            // do whatever with the text line
        }

因为这是一个RTF文件,所以请查看以下内容:RTFEditorKit

答案 1 :(得分:0)

如果您坚持编写自己的RTF阅读器,那么正确的方法是扩展FilterInputStream并在其实现中处理RTF元数据。

答案 2 :(得分:0)

只需将以下代码添加到您的类中,然后使用path参数调用它。它将所有行作为List对象返回

public List<String> readStudentsNoFromText(String path) throws IOException {
            List<String> result = new ArrayList<String>();

            // Open the file that is the first
            // command line parameter
            FileInputStream fstream = new FileInputStream(new File(path));
            // Get the object of DataInputStream
            DataInputStream in = new DataInputStream(fstream);
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            String strLine;
            //Read File Line By Line
            while ((strLine = br.readLine()) != null) {
                // Print the content on the console
                System.out.println(strLine);
                result.add(strLine.trim());

            }
            //Close the input stream
            in.close();

            return result;
        }