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

xiaoxiao2025-10-02  5

本文主要记录关于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; }

 

转载请注明原文地址: https://www.6miu.com/read-5037236.html

最新回复(0)