在输入文本文件

时间:2015-11-04 02:38:38

标签: java

我需要编写一个程序来生成一个新文件,其中每行文本都有一个行号,给定一个没有行号的输入文件。例如:

给定线: “16”

输出线: “1 | 16”,

行号在3个空格中右对齐,后跟|字符(在。之前有一个空格) 之后),然后是该行中的文字。

public class LineNumbers {
public static void process(File input, File output) {
    Scanner scanner;
    PrintWriter writer;
    try {
        scanner = new Scanner(input);
    } catch (FileNotFoundException e) {
        return;
    }
    try {
        writer = new PrintWriter(output);
    } catch (FileNotFoundException e) {
        return;
    }

    for (int i = 1; scanner.hasNextLine(); i++) {
        String s1 = scanner.nextLine();
        String s2 = "   " + i + " | " + s1;
        writer.print(s2);
    }
    scanner.close();
    writer.close();
}
}

这是我的代码,其中字符串s2 ==我需要的输出,但是如何将其转换为输出文件?

***** EDIT *****

这是需要运行的测试之一,其中只在文件中输入一行。但是,在测试仪中,它只在行号前面有两个空格,当我更改我的代码以匹配时,测试通过。所有其他测试人员的编写方式类似,我认为这可能导致问题

    @Test
public void testOneLine() {
    try {
        // create file
        File        input  = folder.newFile( "input.txt" );
        File        output = folder.newFile( "output.txt" );

        PrintWriter write  = new PrintWriter( input );
        write.println( "Lorem ipsum dolor sit amet, consectetur adipiscing elit." );
        write.close();

        // invoke program
        LineNumbers.process( input, output );

        // verify file results
        assertTrue  ( "Output file does not exist", output.exists() );
        Scanner scan     = new Scanner( output );
        String[] result = new String[] { 
                "  1 | Lorem ipsum dolor sit amet, consectetur adipiscing elit."
        };
        for (String expected : result) {
            if (scan.hasNext()) {
                String actual = scan.nextLine();
                assertEquals( "Incorrect result", expected, actual );
            }
            else {
                fail( String.format( "Unexpected end of file: expected \"%s\"", expected ));
                break;
            }
        }
        assertFalse ( "File contains more data than expected", scan.hasNext() );
        scan.close();
    } 
    catch (IOException e) {
        fail( "No exception should be thrown" );
    }
}

1 个答案:

答案 0 :(得分:0)

您的行号前面有太多空格。当您被告知在三个空格中提供行号时,应将其格式化为以下示例之一:

__ 1

_22

333

总共有三个字符,包括任何空格。