`

流未关闭导致调用delete方法删除失败

    博客分类:
  • java
 
阅读更多
public static void main(String[] args){
    	FileOutputStream fos = null;
    	InputStream inputStream = null;
    	try {
    		File file = new File("c:/test1.txt");
    		if (!file.exists()) {
    			file.createNewFile();
    			// 构造写入文件内容
    			fos = new FileOutputStream(file);
    			fos.write("Hello Wolrd".getBytes());
    		}
    		//此时输入流在使用,删除文件会失败
    		inputStream = new FileInputStream(file);
    		file.delete();
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			if(fos != null){
				try {
					fos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if(inputStream != null){
				try {
					inputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
    }

file.delete();会删除文件失败,因为前面的InputStream使用到file,而且InputStream没有关闭流;正确的方法是
    	public static void main(String[] args){
    	FileOutputStream fos = null;
    	InputStream inputStream = null;
    	File file = null;
    	try {
    		file = new File("c:/test1.txt");
    		if (!file.exists()) {
    			file.createNewFile();
    			// 构造写入文件内容
    			fos = new FileOutputStream(file);
    			fos.write("Hello Wolrd".getBytes());
    		}
    		//此时输入流在使用,删除文件会失败
    		inputStream = new FileInputStream(file);
    		file.delete();
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			if(fos != null){
				try {
					fos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if(inputStream != null){
				try {
					inputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if(file != null){
				file.delete();
			}
		}
    }
分享到:
评论

相关推荐

    java 强制删除使用中的文件

    但当文件被其他进程占用时,`delete()`方法会返回`false`,表示删除失败。为了解决这个问题,我们可以采用以下策略: 1. **利用JDBC释放资源**:如果文件是数据库(如MDB),我们可以尝试通过JDBC建立数据库连接,...

    qt的QTcpSocket在对端关闭后,程序就会崩溃(段错误).zip

    1. **资源清理不当**:当TCP连接关闭时,QTcpSocket应该被正确关闭(调用`close()`函数)并删除(`delete`操作)。如果未正确清理,可能会导致资源泄漏,进而影响其他操作,甚至引发段错误。 2. **异步事件处理**:...

    资源正在使用的删除方法

    4. **关闭流**:调用`Close()`方法关闭文件流。 5. **删除文件**:最后使用`File.Delete()`方法删除文件。 这种方式可以在一定程度上解决文件被占用的问题,但需要注意的是,覆盖文件内容可能会带来数据丢失的风险...

    Delphi中几种程序自我删除的方法.docx

    在实际应用中,需要注意的是,自我删除可能导致数据丢失或用户无法恢复,因此通常在确保所有必要操作完成并且用户知情的情况下才使用。同时,对于商业软件,自我删除也应当提供相应的卸载记录或日志,以满足软件管理...

    C++删除非空资料夹

    - 调用`Close`方法关闭文件查找对象。 - 尝试删除目标目录本身。 5. **返回结果**: - 如果`RemoveDirectory`调用失败,则返回`FALSE`;否则返回`TRUE`。 #### 四、辅助函数解析 另一个辅助函数`DelAll`用于...

    找的一个如何删除自己exe方法

    - 需要注意的是,这种方式可能会导致程序突然关闭,对用户体验造成一定影响。 总结来说,通过上述步骤和代码示例,我们可以实现程序自我删除的功能。这种方法在特定场景下非常有用,但同时也需要注意其潜在的风险...

    删除数据库中的数据记录

    - 调用`Close()`方法关闭数据库连接。 #### 注意事项 1. **安全性**:直接拼接用户输入的值到SQL语句中可能会导致SQL注入攻击。应使用参数化查询来避免此类安全问题。 ```csharp string sqlDelete = "DELETE ...

    调用云存储的API

    如果需要,可以使用`Delete Bucket`、`Delete Bucket Logging`和`Delete Bucket Website`关闭或删除相关功能。 对于Object的操作,OSS提供了丰富的API,包括上传、下载、删除、列举Bucket中的Objects等。这些操作...

    VC 强行删除运行中的文件源代码

    在Windows操作系统中,有时我们需要删除一个正在被程序使用的文件,但是由于系统保护机制,通常无法直接执行删除操作,因为文件可能被其他进程占用。在VC++(Visual C++)环境中,我们可以编写源代码来实现强制删除...

    Kernel-Force-Delete:强制删除正在运行的.exe应用程序文件或删除任何锁定的文件

    为了解决这个问题,"Kernel-Force-Delete" 提供了一种强大的解决方案,它允许用户强制删除那些常规方法无法处理的文件。本文将深入探讨这一技术,并结合C++编程语言,阐述如何实现内核级强制删除功能。 首先,理解...

    jsp文件操作 上传 创建 删除

    调用`delete()`方法即可删除文件,但要注意文件是否被其他进程占用,这可能导致删除失败。为了安全起见,可以先检查文件是否存在,再进行删除操作。 除了基本的文件操作,还有其他相关的知识点: 1. **文件读写**...

    tomcat文件上传下载、删除

    删除文件相对简单,只需要调用Java的`File`类提供的`delete()`方法。但有时可能会遇到删除失败的情况,这可能是由于文件正在被其他进程使用或者权限不足导致的。为了解决这些问题,你可以尝试先关闭文件句柄,或者以...

    Java学习笔记之IO流

    删除文件夹时需要注意,如果文件夹内还有其他文件或子文件夹,直接使用`delete()`方法将无法删除。需要先递归地删除内部所有内容后才能删除该文件夹。 ```java public static void delete(String dir) { File fi =...

    删除右键“新建”菜单项目

    这个脚本首先会提示用户输入要删除的文件扩展名,然后调用`reg delete`命令来删除对应的注册表项。`/f`参数表示强制删除,即使该键有子项也一并删除。删除后,脚本会显示一条消息告知用户操作已完成,并暂停执行,让...

    File-Operation-by-java.rar_java 文件复制_operation

    删除文件是通过`File`类的`delete()`方法实现的。该方法会删除指定路径的文件或目录,如果文件被其他进程占用,则可能无法成功删除。可以使用`deleteOnExit()`方法在程序退出时自动删除文件。 4. **新建文件**: ...

    Listview上拉下拉加载,侧滑删除

    - 当数据加载完成,调用SwipeRefreshLayout的`setRefreshing(false)`方法,关闭刷新指示器。 2. **侧滑删除(Swipe-to-Delete)**: 侧滑删除功能允许用户通过在ListView的每一项上向左或向右滑动来触发删除操作。这...

    c++数据库操作ado(源码)

    然后,调用Recordset的Delete方法即可删除当前记录。 6. 修改操作:更新现有记录涉及定位到要修改的记录,通过调用GetFields方法获取Field对象,修改Field对象的Value属性,最后调用Update方法保存更改。 7. 封装...

    2019011008_刘雪枫_第(11)次作业1

    4. 在完成所有数据的写入后,调用文件流的close函数来关闭文件,确保所有缓存中的数据都已写入到磁盘。 5. 最后,释放动态分配的内存。在C++中,应当使用delete[]而不是delete来释放数组类型的动态内存分配,以避免...

    第7节、使用Java操作HDFS1

    5. 删除文件:如果文件存在,使用delete()方法删除,`if(fs.exists(dstPath)){ fs.delete(dstPath, true) ; }`,其中第二个参数表示是否递归删除子目录。 6. 流操作: - 写入:使用FSDataOutputStream创建一个输出...

    4.1_6_文件的基本操作1

    在读取结束后,为了释放系统资源,应该关闭文件,这是通过调用`close()`方法实现的。在Python中,还可以使用上下文管理器(with语句)自动管理文件的打开和关闭,确保文件被正确关闭。 最后,我们讨论一下文件的...

Global site tag (gtag.js) - Google Analytics