2016-12-01 70 views
0

我想打开一个.java文本文件并在文件顶部插入新的包名称。经过对此的一些研究后,我发现我必须创建一个新文件才能插入新的Package名称,并从我的旧文件中复制所有内容。到现在为止还挺好。将文件内容复制到新文件中删除旧文件,将新文件重命名为旧文件

1)第一个问题要么我没有做正确的,但我怎么能够以正确的方式复制行结尾?我有点感觉,通过复制我失去了他们,不知道,但因为我更专注于我的其他问题

2)我想重命名的文件不会重命名,因此导致问题是,我想要插入新软件包的所有文件的命名都是相同的,因此我只剩下名称不正确的最后一个文件。在所有的损失所导致我的其他文件

private static String insertPackage(File file) throws IOException { 
    //creating package name 
    File parent = new File(file.getParent()); 
    String packageName = "package " + parent.getName() + ";\n"; 

    //copy old file 
    File buffer = new File(parent.getPath()+"\\buffer.java"); 

    Charset charset = Charset.forName("UTF-8"); 
    BufferedReader br = Files.newBufferedReader(file.toPath(),charset); 
    BufferedWriter bw = Files.newBufferedWriter(buffer.toPath(),charset); 

    bw.write(packageName,0,packageName.length()); 

    String line; 
    while((line = br.readLine()) != null){ 
     if(!line.startsWith("package ")) { 
      bw.write(line, 0, line.length()); 
     } 
    } 

    //rename new file 
    // String filepath = file.getPath(); 

    // File rename = new File(filepath); 
    boolean renamed = true; 
    if(file.delete()) { 
     renamed = buffer.renameTo(file); 
    } 

    bw.flush(); 
    bw.close(); 
    br.close(); 

    if(!renamed){ 
     return file.getPath(); 
    } 
    return ""; 
} 

返回值是只是为了在万一出现故障的名称。所以现在一切。

这只是插入软件包名称,删除旧的软件包名称和将其他所有内容复制到新文件中的功能。之后,它应该删除旧文件并重命名新文件。

+0

你知道,IDE可以做这种重构,而无需编写脚本吗? :) – zapl

回答

0

您正在丢失换行符,因为readLine会删除它们,但您绝不会将任何内容写入文件。您需要为写入新文件的每一行添加一个\n(或\r\n,具体取决于您的需要)。您可以使用BufferedWriter#newLine来编写依赖于平台的行分隔符。

新文件不会被重命名,因为当您尝试重命名文件时,两个文件的文件流仍然打开。此外File#renameTo是高度依赖于平台(如文档中所述),可能无法覆盖现有文件,我建议您切换到Files#move,您可以在其中指定StandardCopyOption.REPLACE_EXISTING

我也可以推荐给完全切换到NIO API,而不是使用java.io.File可言,而是使用Path直接

还请注意,这是手动使用try-与资源,而不是关闭一个不错的选择流,尤其是在同时处理多个流时。

+1

编写平台换行符的简单方法是使用[BufferedWriter.newLine()](http://docs.oracle.com/javase/8/docs/api/java/io/BufferedWriter.html#newLine-- )。 – VGR

+0

嘿只是改变你所建议的一切,现在工作正常。这是我想创建的小脚本的最后一部分,因此我不必在文件中手动插入所有内容。非常感谢 – x3lq

相关问题