java 中的文件操作(更改文件中的行)
File manipulation (changing lines in a File) in java
我正在尝试读取文件并更改一些行。
指令读取"invoking java Exercise12_11 John filename removes the string John from the specified file."
这是我目前编写的代码
import java.util.Scanner;
import java.io.*;
public class Exercise12_11 {
public static void main(String[] args) throws Exception{
System.out.println("Enter a String and the file name.");
if(args.length != 2) {
System.out.println("Input invalid. Example: John filename");
System.exit(1);
}
//check if file exists, if it doesn't exit program
File file = new File(args[1]);
if(!file.exists()) {
System.out.println("The file " + args[1] + " does not exist");
System.exit(2);
}
/*okay so, I need to remove all instances of the string from the file.
* replacing with "" would technically remove the string
*/
try (//read in the file
Scanner in = new Scanner(file);) {
while(in.hasNext()) {
String newLine = in.nextLine();
newLine = newLine.replaceAll(args[0], "");
}
}
}
}
我不太清楚我的方向是否正确,因为我在让命令行与我一起工作时遇到了一些问题。我只想知道这是否朝着正确的方向前进。
这实际上是在更改当前文件中的行,还是我需要不同的文件来进行更改?我可以把它包装在 PrintWriter 中输出吗?
编辑:删除了一些不必要的信息以突出问题。有人评论说该文件不会被编辑。这是否意味着我需要使用 PrintWriter。我可以只创建一个文件吗?意思是我没有从用户那里获取文件?
您的代码只是读取文件并将行保存到内存中。您将需要存储所有修改的内容,然后将其重新写回文件。
此外,如果您需要保留换行符 \n
以在重新写回文件时保持格式,请务必包含它。
有很多方法可以解决这个问题,这是其中之一。它并不完美,但可以解决您的问题。你可以从中得到一些想法或方向。
List<String> lines = new ArrayList<>();
try {
Scanner in = new Scanner(file);
while(in.hasNext()) {
String newLine = in.nextLine();
lines.add(newLine.replaceAll(args[0], "") + "\n"); // <-- save new-line character
}
in.close();
// save all new lines to input file
FileWriter fileWriter = new FileWriter(args[1]);
PrintWriter printWriter = new PrintWriter(fileWriter);
lines.forEach(printWriter::print);
printWriter.close();
} catch (IOException ioEx) {
System.err.println("Error: " + ioEx.getMessage());
}
我正在尝试读取文件并更改一些行。
指令读取"invoking java Exercise12_11 John filename removes the string John from the specified file."
这是我目前编写的代码
import java.util.Scanner;
import java.io.*;
public class Exercise12_11 {
public static void main(String[] args) throws Exception{
System.out.println("Enter a String and the file name.");
if(args.length != 2) {
System.out.println("Input invalid. Example: John filename");
System.exit(1);
}
//check if file exists, if it doesn't exit program
File file = new File(args[1]);
if(!file.exists()) {
System.out.println("The file " + args[1] + " does not exist");
System.exit(2);
}
/*okay so, I need to remove all instances of the string from the file.
* replacing with "" would technically remove the string
*/
try (//read in the file
Scanner in = new Scanner(file);) {
while(in.hasNext()) {
String newLine = in.nextLine();
newLine = newLine.replaceAll(args[0], "");
}
}
}
}
我不太清楚我的方向是否正确,因为我在让命令行与我一起工作时遇到了一些问题。我只想知道这是否朝着正确的方向前进。
这实际上是在更改当前文件中的行,还是我需要不同的文件来进行更改?我可以把它包装在 PrintWriter 中输出吗?
编辑:删除了一些不必要的信息以突出问题。有人评论说该文件不会被编辑。这是否意味着我需要使用 PrintWriter。我可以只创建一个文件吗?意思是我没有从用户那里获取文件?
您的代码只是读取文件并将行保存到内存中。您将需要存储所有修改的内容,然后将其重新写回文件。
此外,如果您需要保留换行符 \n
以在重新写回文件时保持格式,请务必包含它。
有很多方法可以解决这个问题,这是其中之一。它并不完美,但可以解决您的问题。你可以从中得到一些想法或方向。
List<String> lines = new ArrayList<>();
try {
Scanner in = new Scanner(file);
while(in.hasNext()) {
String newLine = in.nextLine();
lines.add(newLine.replaceAll(args[0], "") + "\n"); // <-- save new-line character
}
in.close();
// save all new lines to input file
FileWriter fileWriter = new FileWriter(args[1]);
PrintWriter printWriter = new PrintWriter(fileWriter);
lines.forEach(printWriter::print);
printWriter.close();
} catch (IOException ioEx) {
System.err.println("Error: " + ioEx.getMessage());
}