关于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);
		}
		
	}

把删除放在流关闭之后,这样就没有问题了

你可能感兴趣的:(java,return,public,false)