不是重写,而是创建新文件。

3

我想要写入一个已经存在的文件。根据论坛上所看到的,这段代码应该重写旧文件,但实际上它会将文件名放在[]括号中并创建一个新文件。有什么想法吗?

 try {
   File file = new File("/home/erik/glassfish3/" + selectedMss + ".ini");
   BufferedWriter output = new BufferedWriter(new FileWriter(file));
   for (String newline : content) {
     output.write(newline + "\n");
   }
   output.close();
 } catch (IOException e) {
   e.printStackTrace();
 }

1
如果selectedMss是一个数组,那么它的.toString()将会有[]。 - Chris Charles
2
@ChrisC 不会,但如果它是ArrayList或其他java.util集合,则会。 - Marko Topolnik
2
除了你的文件名,我认为没有其他问题! - Rahul
1
为了更快地获得更好的帮助,请发布一个SSCCE - Andrew Thompson
2个回答

5
FileWriter类有一个构造函数,它接受第二个布尔参数,指定写入程序是否应该使用附加模式,这将在现有文件的末尾追加新内容。
我还建议在finally块中关闭写入程序。 文档
BufferedWriter output;
try {                
    File file = new File("/home/erik/glassfish3/"+selectedMss+".ini");

    //Providing true for second argument specifies it should be appended. 
    output = new BufferedWriter(new FileWriter(file,true));

    for(String newline: content){
        output.write(newline+"\n");      
    }

} catch ( IOException e ) {
       e.printStackTrace();
}finally{
  output.close();
}

1
尝试使用资源管理器如何? - Marko Topolnik

2
尝试这个:
    try 
    {
           File file = new File("/home/erik/glassfish3/" + selectedMss + ".ini");
           BufferedWriter output = new BufferedWriter(new FileWriter(file,false));
            //true to append       //false to overwrite.

           for (String newline : content) 
           {
                  output.write(newline + "\n");
           }
           output.close();
           catch (IOException e)
           {
                  e.printStackTrace();
           }
    }

你还可以查看Java文档以获取更多解释: http://docs.oracle.com/javase/6/docs/api/java/io/FileWriter.html

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接