编写一个读取包含文本的文件的程序。读取每一行并将其发送到输出文件,前面是行号。行号用分隔符括起来,以便程序可用于编号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,但是我应该增加它还是以任何方式改变它?
答案 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);
}
}
}
}