Java:复制文本文件时覆盖一个字符
我当前的程序读取一个文件并将其复制到另一个目录,但我希望它将一个字符更改为x,这是由两个整数给出的行号和行中字符的编号。 例如,如果int line=5且int char=4,则第五行中的第四个字符更改为x,其余字符保留。 如何将此添加到我的程序中Java:复制文本文件时覆盖一个字符,java,character,bufferedreader,bufferedwriter,Java,Character,Bufferedreader,Bufferedwriter,我当前的程序读取一个文件并将其复制到另一个目录,但我希望它将一个字符更改为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 Excep
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();
}
}
将循环更改为:
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++;
}
请注意,只有当行长为enogth.的Ran Eldan回答了您的问题时,它才会替换char,但我想指出代码中的几个其他主要问题:
public class copytest {
应该是
public class CopyTest {
这不仅仅是随机的吹毛求疵。如果您忽略这些样式规则,当您的一个类名与您的。。。或者其他人的代码。这些错误可能很难发现
当然,如果你无视风格规则,当其他程序员需要阅读你的代码时,你会不断受到他们的抨击writeFile
方法效率极低。每次调用它时,都会打开文件,写一行,然后再次关闭。这导致每写入一行至少有3个系统调用。系统调用开销很大
除了效率低下之外,当程序运行多次时,还存在处理现有输出文件的问题
您应该做的是在运行开始时打开文件一次,并在整个过程中使用相同的BufferedWriter你在使用Java 7吗?没有。我知道用Java 7复制和编辑文件会更容易。