文件删除而没有明确告诉Java删除

时间:2018-06-25 06:03:25

标签: java

违规代码:

    public JWave(String s){
      this.f = new File(s);
      try{
         /**if(!this.f.exists()){
            this.f.createNewFile();
         }*/
         this.datafis = new FileInputStream(f);
         this.datafos = new FileOutputStream(f);
         //datafis.skip(44);
      }catch(IOException e){
         System.out.println(e.toString());
      }
      //generateAttributes();
   }

和测试文件:

public class testFile{
       public static void main(String[] args){
          JWave j = new JWave("harm.wav");
          //System.out.println(j.getAttributes());
          j.close();
       }
    }

还有github仓库:https://github.com/Donald-Tho/JWave harm.wav是可运行的wav文件,之前600 KB,之后0 KB。

为了清楚起见,当我调用构造函数,然后关闭流之后,即使我没有明确告诉它,它也会删除文件。所需的行为是使其保持文件完整。

我在github存储库中都有测试文件,wav文件和JWave文件,以便于访问。

1 个答案:

答案 0 :(得分:6)

打开文件进行输出时,它告诉操作系统立即将文件截断为零字节长。

为了让不知道它们之间差异的人清楚... 这与删除文件不同

不截断文件的唯一方法是在“附加”模式下打开文件。但这意味着新数据将被写入文件的末尾,这可能与处理“ .wav”文件不正确。

如果您不希望文件被立即截断并且追加模式错误,请仅在准备好开始向其写入数据时才打开文件。

如果要用另一个完整文件替换一个完整文件,则需要1)将新数据作为一个临时文件写入同一目录中,然后2)重命名新文件以代替旧文件。