2013-08-07 57 views
0

我在这里有这个代码需要3个参数,一个目录,一个文件名和一个数字。程序在目录中创建文件名并在其中写入数字。所以我可以说...Buffered Writer不需要时覆盖文件

>java D: myName.txt Clay 100 

它将在D中创建一个名为myName.txt的文件,并在其中表示为100。

如果myName被占用,它将名称更改为myName(2),然后将myName(3)(如果myName(2)占用)。唯一的问题是,当它将名称更改为myName(2)并写入时,它会覆盖myName。我不想它覆盖myName,我希望它只是用这个名称创建一个新文件。我看过类似的问题,常见的答案是冲洗并关闭作者完成的工作,但它仍然无法正常工作。

任何帮助,将不胜感激,这里是我的代码,所以屁...

import java.io.*; 

public class filetasktest{ 
    public static void main(String[] args) throws IOException{ 
    int i = 2; 
    String directory = args[0]; 
    if (directory.substring(directory.length() - 1) != "/"){ 
    directory += "/"; 
    } 
    String contactName = args[1]; 
    String contactNumber = args[2]; 

    String finalDirectory = directory + contactName + ".contact"; 

    File f = new File(finalDirectory); 

    while (f.exists()){ 
    finalDirectory = directory + contactName + "(" + ("" + i) + ")" + ".contact"; 
    f.renameTo(new File(finalDirectory)); 
    i++; 
    } 

    Writer writer = null; 
    try { 
    writer = new BufferedWriter(new OutputStreamWriter(
    new FileOutputStream(finalDirectory), "utf-8")); 
    writer.write(contactNumber); 
    } catch (IOException ex){ 
    System.out.println(ex.getMessage()); 
    } finally { 
    try { 
     writer.close(); 
    } catch (Exception ex) { 
     System.out.println(ex.getMessage()); 
    } 
    } 
} 

}

回答

2

你的问题是在这里:

while (f.exists()){ 
    finalDirectory = directory + contactName + "(" + ("" + i) + ")" + ".contact"; 
    f.renameTo(new File(finalDirectory)); 
    i++; 
} 

的renameTo方法不改变文件的路径目的;它重命名磁盘上的文件。 f的路径在整个循环中保持不变:它始于D:/myName.txt,如果该名称的文件存在,则该文件将重命名为D:/myName(1).txt。变量f仍保留路径D:/myName.txt,该路径不再命名文件,并将内容写入D:/myName(1).txt,覆盖以前的内容。

要解决这个问题改变环路:

while (new File(finalDirectory).exists()){ 
    finalDirectory = directory + contactName + "(" + ("" + i) + ")" + ".contact"; 
    i++; 
} 
+0

感谢您的时间。这工作完美。 – Ogen

2

您需要使用附加模式

new BufferedWriter(new FileWriter(yourFileName, true)); 

这里,true指txt应该附加在文件的末尾。 查看FileWriter javadoc了解更多信息。

+0

凡在我的代码我把真的吗?因为我把它放在writer = new BufferedWriter(new OutputStreamWriter( new FileOutputStream(finalDirectory),“utf-8”))的“finalDirectory”之后。它不起作用。 – Ogen

+0

我想这个问题是关于如何创建新文件,而不是关于如何将数据追加到现有文件... – Joni

+0

是的,我不想将它追加到现有的文件,我想myName(2)是一个整体其他文件。 – Ogen