java读取jar包关闭流后删除不了文件
我将断点打在Inputstrem的close后删除文件删不了
你这个是有相应服务还在后台运行,在任务管理器中关掉就可以删了
流是最后关的
猜测:是因为线程在使用这个文件,线程结束才能删
Jar被JVM加载使用了,读文件就没有这种现象了。
InputStream.read(bytes)这里读取一个字节后,自动到下一个。这里应该通过while循环判断是否读取到文件末尾,读取完后再关闭流
是不是文件正在被使用
有其他程序正在操作该文件,一般处理方式就是关闭再打开就可以了
public static void file() throws Exception{
//FileInputStream in = new FileInputStream("E:/Download/test/test.txt");
//FileOutputStream out = new FileOutputStream("E:/Download/test/data/aaa.txt");
URL filerUrl = new URL("file:///E:/Download/test/test.txt");
InputStream in = filerUrl.openStream();
byte[] bytearray = new byte[1024];
do {
in.read(bytearray, 0, 1024);
//out.write(bytearray);
System.out.println(new String(bytearray));
} while (in.available() > 0);
// in.read(bytearray);
in.close();
//out.close();
System.out.println("test");
}
public static void main(String[] args) {
System.out.println("start--------------");
try{
file();
}catch (Exception e){
System.out.println("异常:" + e);
}
System.out.println("end--------------");
}
如下代码,在你当前代码中抛出IOException异常,将读取流放入try catch中 在 finally中关闭流
public void readFile() throws IOException {
InputStream input = null;
try {
input = new FileInputStream("src/readme.txt");
int n;
while ((n = input.read()) != -1) { // 利用while同时读取并判断
System.out.println(n);
}
} finally {
if (input != null) { input.close(); }
}
}
尝试先调用finalize方法
这是url 这个类的问题,他最后调用close 的时候是调用urlconnention里面的close ,然后他底层默认有个jarfile缓存,所以不能用这个获取流,要用urlconnection 关闭缓存在用这个类获取流