Java 在输入文本文件上写入行号

Java 在输入文本文件上写入行号,java,Java,我需要写一个程序,将产生一个新的文件,其中每行文字有一个行号,给定一个没有行号的输入文件。例如: 给定行: 十六 输出线: 1 | 16 行号的格式为3个空格右对齐,后面是一个|字符,前面有一个空格 和之后,然后是该行中的文本 public class LineNumbers { public static void process(File input, File output) { Scanner scanner; PrintWriter writer; try {

我需要写一个程序,将产生一个新的文件,其中每行文字有一个行号,给定一个没有行号的输入文件。例如:

给定行: 十六

输出线: 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==我需要的输出,但我如何将其转换为输出文件

*****编辑*****

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

    @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" );
    }
}

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

__一,

_二十二

333


所以总共有三个字符,包括所有空格。

您已经这样做了。问题是什么?如果你能告诉我问题出在哪里,@AlexIt没有通过我的JUnit测试,我不知道为什么。我认为这个测试可能写得不正确,但仔细看看。有没有一种方法可以使用printf来编写输出文件?你能发布测试和失败吗?你想让我发布整个测试文件吗?它有400多行