Java通过在行文本前面读取包含文本并发送到输出文件的文件

时间:2015-04-10 23:33:03

标签: java

编写一个读取包含文本的文件的程序。读取每一行并将其发送到输出文件,前面是行号。行号用分隔符括起来,以便程序可用于编号Java源文件。提示用户输入和输出文件名。

例如,如果文本是

苹果摔倒了 我把它拿起来了

输出应该看起来像 / 1 /一个苹果落下了 / 2 /我把它拿起来

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class LineNumberer {

    public static void main(String[] args) throws IOException {

        BufferedWriter output = null;

        try {
            FileWriter hellotext = new FileWriter("hello.txt");       //Editing the file
            output = new BufferedWriter(hellotext);
            output.write("Hello World!");
            System.out.println("the hello.txt File has been edited");
        } catch (IOException error) {
            System.err.println("Error: " + error.getMessage());      //File corruption or not found message)
        } finally {
            if (output != null) {
                output.close();
            }
        }
        BufferedReader in1 = null;
        try {
            FileReader hellotext = new FileReader("hello.txt");
            in1 = new BufferedReader(hellotext);
            String textfile1 = in1.readLine();
            System.out.println("Data in file: ");
            System.out.println(textfile1);
        } catch (IOException error) {
            System.err.println("Error: " + error.getMessage());      //File corruption or  not found message)
        } finally {
            if (in1 != null) {
                in1.close();
            }

        }
    }
}

我在这里遇到的问题是这些问题

        int j = 0;

        while (j <= i) {
        String filedata = "/*"+(j+1)+"*/"+textfile[i++];    

他们不断抛出indexarray超出界限错误。

另外,我对于应该为

中的数组大小赋予什么值感到困惑
        String textfile[] = new String[10];
        int i =0;

我给了值10,但是我应该增加它还是以任何方式改变它?

2 个答案:

答案 0 :(得分:0)

如果您不知道输入文件的大小,String[] textfile = new String[10]则不安全。 10以外的数字也不安全。如果您想要填充未知长度的文件,则应该使用ArrayList<String>。或者,如果文件的长度位于文件的第一行,您可以先读取该数字,然后使用String[]

然而,最好的方法是MadProgrammer建议同时打开输入和输出流,从输入读取一行,打印出增强输出,增加行号变量,然后循环直到没有更多输入行。

答案 1 :(得分:0)

你可以使用java.nio包和PrintWriter以及&#34; try-with-resource&#34;,这将照顾关闭读者和作者:

public class Test {
    public static void main(String[] args) throws IOException {
        if(args.length != 2)
            throw new IllegalArgumentException("Illegal number of arguments.  Usage:\n\t java foo.bar.Test <sourceFile> <destFile> ..");

        Path source = Paths.get(args[0]);
        Path destination = Paths.get(args[1]);
        try(
            BufferedReader reader = Files.newBufferedReader(source, Charset.defaultCharset());
            PrintWriter writer = new PrintWriter(Files.newBufferedWriter(destination, Charset.defaultCharset()));
        ) {
            int lineNumber = 1;
            String line = null;
            while((line = reader.readLine()) != null) {
                writer.format("/%d/%s%n", lineNumber++,line);
            }
        }

    }
}