我当前的程序读取一个文件并将其复制到另一个目录,但是我希望它将一个单个字符更改为x,这两个整数由行数和行中字符数给出。 例如,如果int line = 5且int char = 4,则第五行中的第四个字符将更改为x,其余字符将保留。 如何将其添加到我的程序中?
import java.io.*;
import java.util.Scanner;
public class copytest {
public static void main(String[] args) throws Exception {
readFile();
}
public static void readFile() throws Exception {
// Location of file to read
File file = new File("Old.txt");
Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
//System.out.println(line);
writeFile(line);
}
scanner.close();
System.out.println("File Copied");
}
public static void writeFile(String copyText) throws Exception {
String newLine = System.getProperty("line.separator");
// Location of file to output
Writer output = null;
File file = new File("New.txt");
output = new BufferedWriter(new FileWriter(file, true));
output.write(copyText);
output.write(newLine);
output.close();
}
}
答案 0 :(得分:2)
将您的循环更改为:
int i=0;
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
if (i == lineNumber) {
if (line.length() >= charNumber) {
line = line.substring(0,charNumber) + wantedChar +
line.substring(charNumber);
}
}
writeFile(line);
i++;
}
请注意,只有当long long enogth时才会替换char。
答案 1 :(得分:0)
Ran Eldan已回答了您的问题,但我想指出您的代码中的其他几个主要问题:
您违反了Java的标识符样式规则。 Java类名称应为“camel case”,第一个字符应为大写字母;即。
public class copytest {
应该是
public class CopyTest {
这不仅仅是一个随意的挑选。如果您忽略这些样式规则,当您的某个类名与您或其他人的代码定义的成员或包名冲突时,您可能会遇到问题。这些错误很难被发现。
当然,如果你蔑视样式规则,那么当他们需要阅读你的代码时,你会得到其他程序员的不断抨击。
您的writeFile
方法非常低效。每次调用它时,都会打开文件,写一行并再次关闭它。这导致每行写入至少3次系统调用。 Syscall开销很重要。
除了效率低下之外,还有在程序多次运行时处理现有输出文件的问题。
你应该做的是在运行开始时打开一次文件,并在整个过程中使用相同的BufferedWriter。