java 关闭IO流后,仍抛FileNotFoundException异常

本文主要记录关于IO流操作时,在关闭IO流后,操作文件所抛出的FileNotFoundException异常!!

源代码如下:

/**
	 * ,读取TXT文件,并进行数据处理
	 */
	public static String dealData(String url){
		String str = null;
		File file = new File(url);//new一个File对象,并绑定文件路径
		BufferedReader reader = null;//定义一个缓冲
		try {
            //异常所在行
			reader = new BufferedReader(new FileReader(file));//将文件内容读入缓冲区
			
			str = reader.readLine();//按行读取
			System.out.println(str);
		
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			if(reader != null){
				try {
					reader.close();//关闭IO流
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
		return str;
	}

如下图所示:

java 关闭IO流后,仍抛FileNotFoundException异常_第1张图片

java.io.FileNotFoundException: F:\Kankan\buta11i.txt (另一个程序正在使用此文件,进程无法访问。)
等待数据加载!
	at java.io.FileInputStream.open0(Native Method)
	at java.io.FileInputStream.open(Unknown Source)
	at java.io.FileInputStream.(Unknown Source)
	at java.io.FileReader.(Unknown Source)
	at com.njau.commom.GetData.dealData(GetData.java:69)
	at com.njau.commom.GetData$1.run(GetData.java:46)
	at java.util.TimerThread.mainLoop(Unknown Source)
	at java.util.TimerThread.run(Unknown Source)

    通过查找相关博客,大家普遍表示是IO流未关闭导致的错误,但是在本系统中,IO流确定已经关闭!

    在本文中,主要介绍抛该异常的另一种情况为:【该文件被读入缓冲区,但是当IO流关闭后,清空缓冲区buffer仍需要时间】,因此可在下次读取之前在bufferreader前,加入延时,后就不会有该异常。

    添加后的代码:

/**
	 * ,读取TXT文件,并进行数据处理
	 */
	public static String dealData(String url){
		String str = null;
		File file = new File(url);//new一个File对象,并绑定文件路径
		BufferedReader reader = null;//定义一个缓冲
		try {
            Thread.sleep(3000);//加入延时,保证buffer被清空
			reader = new BufferedReader(new FileReader(file));//将文件内容读入缓冲区
			
			str = reader.readLine();//按行读取
			System.out.println(str);
		
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			if(reader != null){
				try {
					reader.close();//关闭IO流
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
		return str;
	}

 

你可能感兴趣的:(Exception,java异常,IO流)