目前我的 Java 代码中的 FileOutputStream 遇到了一些问题。
实际上我正在使用 FileOutputStream 来创建文件,但是一旦创建了文件就无法删除它。据我所知,这可能是因为 FileOutputstream 没有关闭。
在我总结的代码下面:
outFile = new FileOutputStream(dir+"\\"+fileName);
outFile.write("Test");
outFile.flush();
outFile.close();
outFile = null;
System.gc();
那么就没有办法删除文件了,即使是“手动”。当我的程序启动时,我无法通过简单的 del 在 Windows 上删除它。我还尝试删除文件夹 dir 的内容,但都没有用,使用以下代码:
static public void delDir( String place )
{
File path = new File( place );
System.out.println(path.exists());//return true
if( path.exists() )
{
File[] f = path.listFiles();
for( int j = 0 ; j < f.length ; j++ )
{
if( f[ j ].isDirectory() )
{
deleteDirectory( path+"\\"+f[ j ] );
}
f[ j ].delete();
}
}
}
所以我的问题是: 如何为下一次删除关闭此文件(或者如果我们无法关闭它,如何正确删除它)?
最佳答案
这是 Java 中的一个错误。是的,它很少,但它们存在 ;) 你能在 outFile.close()
outFile = null;
System.gc();
然后尝试删除它。如果这不起作用,则有更多可能性。让我知道。
更新
对我来说它有效:
public class FileDeleteExample {
public static void main(String[] args) throws Exception {
File f = new File("test.txt");
FileOutputStream outFile = null;
try {
outFile = new FileOutputStream(f);
outFile.write("Test".getBytes());
} finally {
outFile.flush();
outFile.close();
outFile = null;
System.gc();
}
f.delete();
}
}
更新
我通过删除 outFile=null; 行提到的示例 Sumit Singh 进行了尝试。 System.gc;
这对我也适用。所以 FileOutputStream
应该没有问题。您能否尝试上面的小示例并说明它是否有效?
更新
void closeQuietly(FileOutputStream out) {
try { out.flush(); out.close(); } catch(Exception e) {}
}
现在只需调用 finally
block 中的方法即可!
关于java - 关闭使用 FileOutputStream 创建的文件,以便进行下一次删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12096002/