關於java中file.delete不好用的問題

//一個簡單的刪除文件代碼
public boolean deleteFile(String sPath) {  
	   boolean flag = false;  
	   File file = new File(sPath);  
	    // 路徑爲文件且不爲空則進行刪除  
	    if (file.isFile() && file.exists()) {  
	        file.delete();  
	        System.out.println("delete file.");
	        flag = true;  
	    }  
	    return flag;  
	}

單獨測試刪除代碼沒有問題。

後來在讀文件的方法中調用刪除方法,在讀取完畢後刪除。

public void readFile(String filename)
	{
		FileReader reader = null;	
		try
		{
			reader = new FileReader(filename);// 讀取url文件
		}
		catch (FileNotFoundException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		String name = filename.split("\\\\")[filename.split("\\\\").length-1];
		System.out.println("filename is "+ filename);
		BufferedReader br = new BufferedReader(reader);
		String s1 = null;
		String temStr = "";
		String content = "";
		int breakCount = 0;
		try
		{
			while ((s1 = br.readLine()) != null)
			{
				breakCount++;
				if(s1.contains("------------------------"))
				{
					
				}
				else
				{
					if(breakCount == 2 && s1.contains("docid"))
					{
						break;
					}
					
					
				}
			}
			
			if(breakCount != 2)
		{
			System.out.println(breakCount);
			boolean flag = deleteFile(filename);
			System.out.println(flag);
		}
				
		}
		catch (IOException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try
		{
			br.close();
		}
		catch (IOException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try
		{
			reader.close();
		}
		catch (IOException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}

這樣寫的時候遇到了問題,delete方法返回了true值,但是文件並沒有被刪除

檢查之後發現是因爲文件的讀取流未關閉,造成文件無法刪除。

但是爲什麼會返回true還沒有確定,估計是個小bug吧

把代碼修改一下

public void readFile(String filename)
	{
		FileReader reader = null;	
		try
		{
			reader = new FileReader(filename);// 讀取url文件
		}
		catch (FileNotFoundException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		String name = filename.split("\\\\")[filename.split("\\\\").length-1];
		System.out.println("filename is "+ filename);
		BufferedReader br = new BufferedReader(reader);
		String s1 = null;
		String temStr = "";
		String content = "";
		int breakCount = 0;
		try
		{
			while ((s1 = br.readLine()) != null)
			{
				breakCount++;
				if(s1.contains("------------------------"))
				{
					
				}
				else
				{
					if(breakCount == 2 && s1.contains("docid"))
					{
						break;
					}
					
					
				}
			}
			
			
				
		}
		catch (IOException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try
		{
			br.close();
		}
		catch (IOException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try
		{
			reader.close();
		}
		catch (IOException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		if(breakCount != 2)
		{
			System.out.println(breakCount);
			boolean flag = deleteFile(filename);
			System.out.println(flag);
		}
		
	}

把刪除放在流關閉之後,這樣就沒有問題了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章