2015-11-06 98 views
1

我试图将数据从旧的文本文件转移到新的文本文件。虽然下面的代码能够成功传输,但它不会删除旧的文本文件。我可以知道这是为什么吗?无法删除使用删除文本文件()

private void dataTransfer(String oldFilePath, String newFilePath) { 

     byte[] buffer = new byte[10000]; 
     try { 
      FileInputStream fileInput = new FileInputStream(oldFilePath); 
      BufferedInputStream bufferedInput = new BufferedInputStream(fileInput); 
      FileOutputStream fileOutput = new FileOutputStream(newFilePath); 
      BufferedOutputStream bufferedOutput = new BufferedOutputStream(fileOutput); 
      while(true) { 
       int length = fileInput.read(buffer); 
       if(length == -1) { 
        break; 
       } else { 
        bufferedOutput.write(buffer); 
        bufferedOutput.flush(); 
       } 
      } 
      fileInput.close(); 
      bufferedInput.close(); 
      fileOutput.close(); 
      bufferedOutput.close(); 
      File oldFile = new File(oldFilePath); 
      oldFile.delete(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      System.out.println(ERROR_TRANSFER_DATA); 
     } 

    } 
+0

放技术的问题标签,调试代码,并检查它是否被删除 – mikus

+0

尝试检查是否有权限删除的文件或文件是否存在与否,或者你可以检查文件是否被锁定之前存在的文件一些其他的过程! –

+0

为什么你甚至可以复制该文件,如果你能[移动它(http://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#move-java。 nio.file.Path-java.nio.file.Path-java.nio.file.CopyOption ...-)?另外为什么你冲洗输出作家呢? '关闭'一次就可以完成,不需要手动完成。 – fabian

回答

0

对于删除文件,它应该可以正常工作,但是对于删除目录,您必须确保目录为空。

0

更新的JRE和JDK,请确保您有该文件的权限。尝试使用您创建的文件。

此外,添加一个catch块抛出:SecurityException

+0

JRE和JDK版本在这里没有太多要做的事情(至少不太可能)。 'SecurityException'是'RuntimeException',你会看到它,如果它被抛出。 –

0

根据Oracle的文档,删除方法并不能保证它会删除该文件。 http://docs.oracle.com/javase/7/docs/api/java/io/File.html#delete()

删除一个文件,如果将失败:

  • 文件不存在
  • 没有在该文件上的锁可能被其他进程打开
  • 文件不磁盘上存在
  • 您没有足够的权限删除该文件(在这种情况下抛出SecurityException)
0

您可以使用下面的代码块。它的工作,虽然不知道。即使没有setWritable,它的工作原理,

oldFile.setWritable(true); 
if(!oldFile.delete()){ 
    System.out.println("de;eted"); 
} 
0

我同意,你可能没有足够的权限来删除文件@panagdu。

正如侥幸的FileInputStream

之前尝试关闭bufferedStream像

bufferedInput.close(); 
fileInput.close(); 
bufferedOutput.close(); 
fileOutput.close(); 

但我不认为这会有所帮助。

测试你与足够的权限文件中的代码。例如,Java不允许将delete()用于系统文件。