2013-07-06 38 views
0

我当前的程序读取一个文件并将其复制到另一个目录,但我希望它将单个字符更改为x,这是由两个整数为行和该行中的字符数。 例如,如果int line = 5且int char = 4,则第五行中的第四个字符将更改为x,其余部分保留。 如何将此添加到我的程序中?Java:覆盖一个字符,同时复制文本文件

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

您使用的是Java 7吗? – fge

+0

不,我知道用Java 7复制和编辑文件会更容易。 – user2551736

回答

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++; 
    } 

注意,它将取代焦炭仅在线路长enogth。

+0

非常感谢! – user2551736

+0

为什么要删除?这里是 –

0

然入住Eldan酒店已经回答了你的问题,但我想指出几个其他的重大问题与您的代码:

  1. 您违反了Java的标识样式规则。 Java类名应该是“camel case”,第一个字符应该是大写字母;即

    public class copytest { 
    

    应该

    public class CopyTest { 
    

    这不只是一个随机的吹毛求疵。如果您忽略这些风格规则,当您的某个类名与您的或其他人的代码定义的成员名或包名冲突时,您可能会遇到问题。错误可能很难找到。

    当然,如果你藐视风格规则,当他们需要阅读你的代码时,你会从其他程序员那里得到不断的失望。

  2. 你的writeFile方法是非常低效的。每次打电话时,都会打开文件,写一行并再次关闭。这会导致每行写入至少3次系统调用。系统调用的开销很大。

    除了效率低下之外,当程序运行多次时,您有处理现有输出文件的问题。

    你应该做的是在运行开始时打开一次文件,并在整个过程中使用相同的BufferedWriter。