本文主要记录关于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: F:\Kankan\buta11i.txt (另一个程序正在使用此文件,进程无法访问。) 等待数据加载! at java.io.FileInputStream.open0(Native Method) at java.io.FileInputStream.open(Unknown Source) at java.io.FileInputStream.<init>(Unknown Source) at java.io.FileReader.<init>(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; }