在我的代码中覆盖文件java时出错

时间:2013-02-09 02:52:39

标签: java file

我已经创建了一个写入它的临时文件,我想覆盖现有的文件

  1. 创建临时文件
  2. 填写
  3. 打开旧文件
  4. 将旧文件设置为等于新文件
  5. 这是我的代码,但它无效

    如果您能找到问题,请告诉我。 谢谢!

    try{
                //create a temporary file
                File temporary=File.createTempFile("tmp", "");
                BufferedWriter writer = new BufferedWriter(new FileWriter(temporary));
                //Write each line to file (temporary)
                for (String string : parsedArticlesToSave) {
                    writer.write (String.format("%s\n", string));
                }
                //load old file
                File oldFile = new File("StringFile/ArticlesDB.txt");
                //replace old file with new file
                oldFile=temporary;
                //release resources
                writer.close();
            }catch(Exception e){
                e.printStackTrace();
            }
    

1 个答案:

答案 0 :(得分:1)

我认为你误解了整个课堂的概念 的java.io.File

并且不理解Java中变量赋值的概念。

使这个类的对象java.io.File在文件上创建一种指针,这样你就可以“整体”操作它了

所以你通过'oldFile = temporary'所做的只是让你指向oldFile的指针指向临时的。但这只能在Java中的变量赋值环境中完成,它对实际的文件系统没有任何影响。

现在关于变量赋值。

带对象: 假设你有两个整数:

Integer a = 5;
Integer b = 10;

通过执行'b = a',您实际上并未更改对象b本身,而是对对象b的引用成为对象a的引用。对象b的旧值仍然存储在内存中,但是由于在赋值之后没有人指向(引用)它,它变得不可访问并且最终将被垃圾收集。

现在关于解决方案本身: 您应该将文件temp的内容逐行复制到旧文件中 逐个字节)或者你只是想让旧文件具有相同的内容而你真的不需要一个临时文件来删除文件然后重命名临时文件 成为'oldFile'。

以下是如何在java中重命名的链接: Renaming in Java

希望这有帮助