我有一个随机代码的文件(可以使用任何其他随机文件)我想在每行的开头添加行数。 例如:
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;文件位置在项目的文件夹中。 谢谢你的时间。
答案 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
表示依赖于系统的路径名 设备或管道等实体。