在文件中每行的开头添加数字

时间:2016-11-22 11:16:32

标签: java bluej

我有一个随机代码的文件(可以使用任何其他随机文件)我想在每行的开头添加行数。 例如:

1.
2.
3.

等。 同时删除任何空行并正确编号。 到目前为止,这是我的代码:

public static void main(String[] args) throws FileNotFoundException 
{
    boolean foundException = false;
    Scanner keyboard = new Scanner(System.in);
    do {
        try {
            System.out.print("Please enter input file name: ");
            String fileName = keyboard.next();
            File inputFile = new File("inputfile.txt"); 
            Scanner scanner = new Scanner(new File("inputfile.txt"));
            PrintStream out = new PrintStream(new File("inputfile.txt"));

            while(scanner.hasNextLine()){
                String line = scanner.nextLine();
                line = line.trim();
                if(line.length() > 0)
                    out.println(line);
            }

            for( int i = 1; i < inputFile.length(); i++){
                System.out.println( i + "." + inputFile);
            }
            foundException = false;
        }
        catch (FileNotFoundException x) {
            System.out.println("File does not exist");
            foundException = true;
        }

    } while (foundException);
}
}

但我得到的结果是非常多的行+文件名,如&#34; 300.inputfile.txt&#34; 整个文件有大约25行,但我有500多行,我假设它在一个空格后计算每个单词? 我有另一个关于该文件的问题,我不确定我是否正确地在代码中调用该文件是&#34; inputfile.txt&#34;文件位置在项目的文件夹中。 谢谢你的时间。

2 个答案:

答案 0 :(得分:1)

如果你可以将所有行保留在内存中,这有助于写入同一个文件:

    Path inputFile = Paths.get("inputfile.txt");
    Charset charset = Charset.getDefault();
    List<String> lines = Files.readAllLines(inputFile, charset);
    try (PrintWriter out = new PrintWriter(
            Files.newBufferedWriter(inputFile, charset,
                StandardOpenOptions.TRUNCATE_EXISTING))) {
        int lineno = 0;
        for (String line : lines) {
            ++lineno;
            out.printf("%d. %s%n", lineno, line);
        }
    }

您可以使用Charset.UTF_8这样的固定字符集,以及%n之类的固定换行符,而不是\r\n(Windows)。

答案 1 :(得分:0)

输入流的初始化将删除文件内容,因此您可以先读取文件内容,然后按如下方式写入:

public static void main(String[] args) throws FileNotFoundException {
        boolean foundException = false;
        Scanner keyboard = new Scanner(System.in);
        do {
            try {
                System.out.print("Please enter input file name: ");
                String fileName = keyboard.next();
                File inputFile = new File("inputfile.txt");
                Scanner scanner = new Scanner(new File("inputfile.txt"));
                ArrayList<String> lines = new ArrayList<>();

                int lineNum = 1;
                while (scanner.hasNextLine()) {
                    String line = scanner.nextLine();
                    line = line.trim();
                    if (line.length() > 0) {
                        lines.add(lineNum + "." + line);
                        lineNum++;
                    }
                }
                PrintStream out = new PrintStream(new File("inputfile.txt"));
                for (String line : lines)
                    out.println(line);

            } catch (FileNotFoundException x) {
                System.out.println("File does not exist");
                foundException = true;
            }

        } while (foundException);
    }

在文件对象上调用的方法名称不返回文件中的行数。我将参考文档:

  

此抽象路径名表示的文件的长度(以字节为单位),   如果文件不存在,则为0L。一些操作系统   可能会返回0L表示依赖于系统的路径名   设备或管道等实体。